如何访问默认的en-US文化,而不是在特定系统上定义?

时间:2012-05-04 19:58:11

标签: c# datetime

我正在尝试让我的应用程序处理来自字符串的DateTimes的一些转换。为了处理不同的文化,我指定了我想要转换使用的文化。我认为这让我受到了覆盖,但我发现你可以改变该系统如何定义“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之类的内容?作为一个注释,我无法控制我正在解析的字符串的源格式,它是第三方。

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以使用与英语相关联的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)
});

答案 1 :(得分:1)

此特定示例可由using the Invariant Culture处理,它使用美式日期格式。

但是,如果您知道日期的确切表示,您可能仍希望使用DateTime.ParseExact,因为它还具有显示以精确格式<解析日期的意图的附加副作用/ em>非常清楚。

答案 2 :(得分:0)

InvariantCulture非常适合英语,但对于适用于其他语言的更通用的解决方案,请尝试:

CultureInfo c = new CultureInfo("en-US", false);

向构造函数添加false会告诉它忽略文化的任何用户自定义。