每当将字符串转换为日期时,您都应该指定要使用的区域性。
您应使用的区域性取决于日期格式的区域性。例如,如果您正在解析的所有日期的格式为Slovak:
String s = "24. 10. 2011";
然后你需要解析该字符串,就像它在斯洛伐克(斯洛伐克) (sk-SK
) 文化:
//Bad:
d = DateTime.Parse(s);
//Good:
d = DateTime.Parse(s, CultureInfo.CreateSpecificCulture("sk-SK")); //Slovak (Slovakia)
如果您的日期都在塔吉克语(塔吉克斯坦西里尔字母),那么你需要将其解析为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-AU
(澳大利亚英语):24/10/2011
-
en-IA
(英属印度):24-10-2011
-
en-ZA
(南非英语):2011/10/24
-
en-US
(美国英语):10/24/2011
我怀疑你更喜欢英语(印度) (en-IA
).
但是,如果您确实无法决定在将日期转换为字符串时使用哪种区域性,反之亦然,并且日期永远不会向用户显示,那么您可以使用不变的文化:
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