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再次检查:@juharrCultureInfo.CurrentCulture
在早期版本的.Net中是只读的。这是因为在de
区域性中根本没有AM/PM
tt
格式不打印任何东西-那就是CultureInfo.InvariantCulture
正是我想要的解决方案类型