1

我试图让我的应用程序处理来自字符串的 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?请注意,我无法控制我正在解析的字符串的源格式,它是第三方的。

谢谢!

4

3 回答 3

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)
});
于 2012-05-04T20:01:03.120 回答
1

这个特定的例子可以通过使用 Invariant Culture来处理,它使用美国风格的日期格式。

但是,如果您知道日期的确切表示,您可能仍想使用DateTime.ParseExact,因为它还具有额外的副作用,即非常清楚地显示以该确切格式解析日期的意图。

于 2012-05-04T20:01:19.477 回答
0

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

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

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

于 2014-10-01T16:17:48.143 回答