.NET-加拿大DateTime格式错误

Eth*_*wne 5 .net c# culture datetime

我目前有一个需要支持多种文化的应用程序。一个日期字符串被传入并被解析为一个DateTime对象。为了允许多种文化,我首先设置线程的文化和UICulture。

这是我的代码示例:

首先,我为此线程设置了区域性。这是通过URL(例如en-us,en-ca,fr-ca)传递的:

CultureInfo ci = new CultureInfo(culture, false);
Thread.CurrentThread.CurrentUICulture = ci;
Thread.CurrentThread.CurrentCulture = ci;
Run Code Online (Sandbox Code Playgroud)

然后,我将一个也传入URL的日期字符串转换为DateTime。根据文化的不同,日期将以mm / dd / yyyy或dd / mm / yyyy传递。

我用以下代码解析日期字符串:

DateTime DateTimeObject;
bool validDate = DateTime.TryParse(DateStringFromURL, Thread.CurrentThread.CurrentCulture, DateTimeStyles.None, out DateTimeObject);
Run Code Online (Sandbox Code Playgroud)

TryParse适用于大多数区域性,并提供了有效的datetime对象。但是,en-ca和fr-ca会出现问题。如果传入了错误的格式,则日期字符串将无法正确解析。

下面显示了每种文化.NET似乎期望的格式:

         dd/MM/yyyy    MM/dd/yyyy
EN-CA      Valid        Invalid
FR-CA     Invalid        Valid
Run Code Online (Sandbox Code Playgroud)

编辑:更确切地说,这里是导致我出现问题的示例:

对于EN-CA:

DateTime.Parse("26/08/2014") //VALID
DateTime.Parse("08/26/2014") //EXCEPTION THROWN
Run Code Online (Sandbox Code Playgroud)

对于FR-CA:

DateTime.Parse("26/08/2014") //EXCEPTION THROWN
DateTime.Parse("08/26/2014") //VALID
Run Code Online (Sandbox Code Playgroud)

这与其他系统如何处理这种文化的日期格式相反。

为什么格式看似倒退?这是.NET 4.5的错误吗?

任何和所有帮助将不胜感激,谢谢。

注意:.NET版本4.5

Der*_*rek 2

你或许应该研究一下Invariant文化。这就是您应该用于 URL 传递的内容。您可以使用本地文化在客户端上进行显示。

通常,每当您存储数据(例如,在数据库或文件中)时,最好使用不变区域性。显示数据时,您可以使用当地文化。传递数据时,您需要使用不变区域性。

在这里阅读更多内容。