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