如何访问默认的 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?请注意,我无法控制我正在解析的字符串的源格式,它是第三方的。

谢谢!

如何访问默认的 en-US 区域性,而不是特定系统上定义的区域性

您可以使用与英语关联的 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 会告诉它忽略区域性的任何用户自定义。