.NET:InvariantCulture和en-US之间有什么区别吗?

Ian*_*oyd 25 .net globalization culture internationalization

鉴于以下两种文化:

CultureInfo c1 = InvariantCulture;
CultureInfo c2 = new CultureInfo("en-US");
Run Code Online (Sandbox Code Playgroud)

我要检查两种文化特有的每一条信息,例如:

c1.DateTimeInfo.ShortDatePattern;
c2.DateTimeInfo.ShortDatePattern;

c1.DateTimeInfo.LongDatePattern;
c2.DateTimeInfo.LongDatePattern;

c1.NumberFormat.CurrencyDecimalDigits;
c2.NumberFormat.CurrencyDecimalDigits;

c1.TextInfo.IsRightToLeft;
c2.TextInfo.IsRightToLeft;
Run Code Online (Sandbox Code Playgroud)

我会发现有什么不同吗?

换句话说,InvariantCulture,出于各种目的,是否与"en-US"文化相同?

Dav*_*ton 33

是.

例如:InvariantCulture使用货币的国际符号:"¤"与美元符号:格式化货币时的"$".

然而,在大多数情况下,它们非常相似.

编辑:的差异列表en-USInvariant:

                          en-US                        Invariant
=====================     ==================           ==================
Number                    123456.78                    +123456.78
Currency Symbol           $                            ¤
Currency                  $123456.78                   ¤123456.78
Short Date                1/11/2012                    01/11/2012
Time                      10:36:52 PM                  22:36:52
Metric                    No                           Yes
Long Date                 Wednesday, January 11, 2012  Wednesday, 11 January, 2012
Year Month                January, 2012                2012 January
Run Code Online (Sandbox Code Playgroud)

  • 引用MSDN:*"InvariantCulture属性既不代表中立也不代表特定文化.它代表了对文化不敏感的第三种文化.它与英语有关,但与国家或地区没有联系."*...因此,大部分时间都是英语的行为是有意义的(尽管对于奇怪的美国日期格式我会喜欢看到的东西是健全的)但是货币只是废话:) (4认同)
  • 和逻辑日期格式:yyyy-MM-dd. (4认同)
  • @IanBoyd,实际上很好。因此,没有人会错误地尝试使用InvariantCulture解析本地货币字符串。真正使InvariantCulture失效的原因是笨拙的M / d / yyyy,而不是正常的yyyy-MM-dd。 (2认同)

Vin*_*vic 5

存在一些实际差异(在 Watch 窗口中检查两个值),但最相关的差异是intent。InvariantCulture 显示您以独立于文化(如果英语相关)的方式解析某些数据的意图,而 en-US 则声明您以特定于美国的方式解析数据的实际意图。