VS2019和dotnetfiddle.net上的CultureInfo nb-NO DateTime.TryParse差异

时间:2019-04-25 15:16:15

标签: c# datetime cultureinfo

在我的机器上运行并输出以下内容

string locale = "nb-NO";

CultureInfo culture = CultureInfo.CreateSpecificCulture(locale);

string shortDateFormatString = culture.DateTimeFormat.ShortDatePattern;
string shortTimeFormatString = culture.DateTimeFormat.ShortTimePattern;

我得到以下输出

shortDateFormatString "dd.MM.yyyy"
ShortTimePattern "HH:mm"

但是在dotnetfiddle.net上,我得到了以下内容

shortDateFormatString "dd.MM.yyyy"
ShortTimePattern "HH.mm"

我想C#使用CLDR,所以根据 https://github.com/unicode-cldr/cldr-dates-full/blob/1af902b749bef761f07281f80241250053b4313d/main/nb/ca-gregorian.json#L323

两个短时间模式都应该有效。 在dotnetfiddle上,可以解析nb-NO datetime,如下所示

06.12.2017 12:34
06.12.2017 12.34

但是在我的机器上的VS2019中,只能解析

06.12.2017 12:34

怎么可能与众不同?两者都使用.NET 4.7.2。

您可以在这里https://dotnetfiddle.net/68DDYz

查看我的小提琴

2 个答案:

答案 0 :(得分:1)

  

怎么可能与众不同?

因为区域性信息是从操作系统加载的,并且会随时间而变化。除非两台计算机完全相同的Windows版本(相同的更新,修复程序等)都在Windows上,否则它们对于诸如短时间模式之类的值完全可能具有不同的值。 (是的,这很烦人,但这是生活的一部分。)

答案 1 :(得分:0)

乔恩说得很对(对!)

文化设置很棘手。由于它们存储在Windows注册表中,因此它们可以是不同的/可以在.net Framework版本,操作系统版本,Windows更新,修补程序等上进行更改。这意味着,即使两个服务器都使用相同的.NET Framework版本,也不意味着两者的每种文化设置都相同。

例如,我可以向您展示it-IT的文化。

请参阅:.NET (3.5) formats times using dots instead of colons as TimeSeparator for it-IT culture?

对于.NET Framework 3.5,it-IT文化具有.作为TimeSeparator,但是在.NET Framework 4.0版本中,它已更改为:,这在Wikipedia上已有说明。

这种变化当然不是世界的尽头,但也不是令人满意的。