DateTime.Parse似乎忽略了文化

时间:2017-08-31 16:43:04

标签: c# parsing datetime

所以我在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函数中,结果也是一样的。有关如何解决此问题的任何建议吗?

1 个答案:

答案 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);