每当您将字符串转换为日期时,您都应该指定要使用的文化。
您应该使用的文化取决于日期格式的文化。例如,如果您正在解析的所有日期都被格式化为Slovak:
String s = "24. 10. 2011";
然后你需要像在斯洛伐克(斯洛伐克)(sk-SK
)文化中一样解析字符串:
//Bad:
d = DateTime.Parse(s);
//Good:
d = DateTime.Parse(s, CultureInfo.CreateSpecificCulture("sk-SK")); //Slovak (Slovakia)
如果您的日期都是Tajik (Tajikistan Cyrillic),那么您需要将其解析为tg-Cryl-Tj
:
String s = "24.10.11"
DateTime d = DateTime.Parse(s, CultureInfo.CreateSpecificCulture("tg-Cryl-Tj"));
这就引出了一个问题:您使用的是什么日期格式?您不应该依赖服务器的语言环境设置,而应该决定您想要什么格式。
//Bad
String s = d.ToString();
//Good
String s = d.ToString(CultureInfo.CreateSpecificCulture("si-LK")); //Sinhala (Sri Lanka)
//s = "2011-10-24 12:00:00 පෙ.ව."
我怀疑你更喜欢用英语做所有事情。但是你必须决定哪种英语变体:
en-IA
(英属印度):24-10-2011 15:19:52
en-BZ
(英语伯利兹):24/10/2011 03:19:52 PM
en-AU
(澳大利亚英语):24/10/2011 3:19:52 PM
en-NZ
(英语新西兰):24/10/2011 3:19:52 p.m.
en-GB
(英国联合王国):24/10/2011 15:19:52
en-ZA
(英语南非):2011/10/24 03:19:52 PM
en-US
(英语(美国):10/24/2011 3:19:52 PM
但是,如果您真的无法决定在将日期转换为字符串时使用哪种文化,反之亦然,并且日期永远不会显示给用户,那么您可以使用Invariant Culture:
String s = "10/24/2011" //invariant culture formatted date
d = DateTime.Parse(s, CultureInfo.InvariantCulture); //parse invariant culture date
s = d.ToString(CultureInfo.InvariantCulture); //convert to invariant culture string