C# Parse似乎忽略了区域性

C# Parse似乎忽略了区域性,c#,parsing,datetime,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"

因此,我使用了
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,并提供了一些更好地说明问题的示例:


即使我将
CurrentCulture
添加到Parse函数中,结果也是一样的。有什么建议可以解决这个问题吗?

当您第一次使用
ToString
时,您的精确度正在下降。您需要使用大写字母H,因为您正在丢失AM/PM

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
,以在不考虑当前区域性设置的情况下维护AM/PM

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

你试过DateTime.ParseExact吗?@Joe如果可能的话,我想避免使用甚至不为我编译的
ParseExact
,因为
CultureInfo.CurrentCulture
是readonly@juharr再次检查:@juharr
CultureInfo.CurrentCulture
在早期版本的.Net中是只读的。这是因为在
de
区域性中根本没有
AM/PM
tt
格式不打印任何东西-那就是
CultureInfo.InvariantCulture
正是我想要的解决方案类型