我的网站托管在不同位置的多台服务器上
数据格式的文化在任何地方都是不同的 - 我们在任何地方都使用 mm/dd/yyyy
格式,但以防某些服务器将文化设置为 dd/mm/yyyy
然后我们的网站生成日期时间异常。
最佳答案
无论何时将字符串转换为日期,您都应该指定要使用的文化。
您应该使用的文化取决于日期的格式设置。例如,如果您要解析的所有日期的格式都为 斯洛伐克语:
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
关于c# - 服务器的全局文化在不同服务器上不同时的 DateTime 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7874869/