如何访问默认的 en-US 区域性,而不是特定系统上定义的区域性
本文关键字:区域性 系统 定义 访问 默认 何访问 en-US | 更新日期: 2023-09-27 18:33:17
我正在尝试让我的应用程序处理字符串对日期时间的一些转换。 为了处理不同的区域性,我指定了希望转换使用的区域性。 我以为这已经覆盖了我,但我发现您可以更改该系统定义"en-US"的特定元素,例如长日期模式和短日期模式。在这些情况下,当要解析的日期采用 MM/dd/yyyy 格式时,下面的代码不起作用。
CultureInfo c = new CultureInfo("en-US");
string[] permissions = Regex.Split(permissionData, @"'r'n");
foreach (string permission in permissions)
{
string[] details = permission.Split(',');
this.Add(new WPermission()
{
WRegion = Convert.ToInt32(details[0],c),
StartDate = Convert.ToDateTime(details[1],c),
EndDate = Convert.ToDateTime(details[2],c)
});
}
我的问题是:有没有办法访问"en-US"的默认定义,并加载它而不是用户定义的版本,或者我被降级为类似ParseExact
?请注意,我无法控制我正在解析的字符串的源格式,它是第三方的。
谢谢!
您可以使用与英语关联的 CultureInfo.InvariantCulture,但忽略区域信息和用户自定义。
this.Add(new WPermission() {
WRegion = Convert.ToInt32(details[0], CultureInfo.InvariantCulture),
StartDate = Convert.ToDateTime(details[1], CultureInfo.InvariantCulture),
EndDate = Convert.ToDateTime(details[2], CultureInfo.InvariantCulture)
});
可以使用使用美国样式日期格式的固定区域性来处理此特定示例。
但是,如果您知道日期的确切表示形式,您可能仍希望使用DateTime.ParseExact
,因为它还具有额外的副作用,即非常清楚地显示以该确切格式解析日期的意图。
InvariantCulture 非常适合英语,但对于适用于其他语言的更通用的解决方案,请尝试:
CultureInfo c = new CultureInfo("en-US", false);
向构造函数添加 false 会告诉它忽略区域性的任何用户自定义。