所以我在DateTime.ToString()
和DateTime.Parse()
使用了几种不同的文化。我偶然发现了这个:
DateTime date = new DateTime(2017, 8, 30);
CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("de-DE");
Console.WriteLine(DateTime.Parse(date.ToString("MMM d, yyyy h:mm tt")).Hour);
CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
Console.WriteLine(DateTime.Parse(date.ToString("MMM d, yyyy h:mm tt")).Hour);
结果是:
12
0
我制作了一个rextester,其中包含更多可以更好地显示问题的示例:http://rextester.com/XNBV97545
即使我将CurrentCulture
添加到Parse函数中,结果也是一样的。有关如何解决此问题的任何建议吗?
答案 0 :(得分:3)
首次使用ToString
时,您的精确度会下降。您需要使用大写字母H,因为您正在失去上午/下午。
DateTime date = new DateTime(2017, 8, 30);
CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("de-DE");
Console.WriteLine(DateTime.Parse(date.ToString("MMM d, yyyy H:mm tt")).Hour);
或者,无论当前的文化背景如何,您都可以将文化指定为CultureInfo.InvariantCulture
以维持上午/下午。
DateTime date = new DateTime(2017, 8, 30);
CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("de-DE");
Console.WriteLine(DateTime.Parse(date.ToString("MMM d, yyyy h:mm tt", CultureInfo.InvariantCulture)).Hour);