Подтвердить что ты не робот

.NET: Существуют ли какие-либо различия между InvariantCulture и en-US?

Учитывая следующие две культуры:

CultureInfo c1 = InvariantCulture;
CultureInfo c2 = new CultureInfo("en-US");

и я должен был исследовать каждую информацию, относящуюся к обеим культурам, например:

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

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

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

c1.TextInfo.IsRightToLeft;
c2.TextInfo.IsRightToLeft;

Я нашел бы какие-либо отличия?

Другими словами, является ли InvariantCulture для всех целей идентичной культуре "en-US"?

4b9b3361

Ответ 1

Да.

Например: InvariantCulture использует международный символ для валюты: "¤" по отношению к знаку доллара: "$" при форматировании валюты.

По большей части, однако, они очень похожи.

Изменить: список различий между en-US и Invariant:

                          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

Ответ 2

Существуют некоторые фактические различия (проверьте оба значения в окне просмотра), но наиболее важным отличием является намерение. InvariantCulture показывает ваше намерение анализировать некоторые данные в независимой культуре, если это связано с английским языком, в то время как en-US заявляет о вашем фактическом намерении анализировать данные в соответствии с США.

Ответ 3

Хорошо, если вы посмотрите, что может сделать ваш фрагмент кода:

CultureInfo c1 = CultureInfo.InvariantCulture;
CultureInfo c2 = new CultureInfo("en-US");

Console.WriteLine( c1.DateTimeFormat.ShortDatePattern.ToString());
Console.WriteLine( c2.DateTimeFormat.ShortDatePattern.ToString());

Console.WriteLine( c1.DateTimeFormat.LongDatePattern.ToString());
Console.WriteLine( c2.DateTimeFormat.LongDatePattern.ToString());

Console.WriteLine( c1.NumberFormat.CurrencyDecimalDigits.ToString());
Console.WriteLine( c2.NumberFormat.CurrencyDecimalDigits.ToString());

Console.WriteLine( c1.TextInfo.IsRightToLeft.ToString());
Console.WriteLine( c2.TextInfo.IsRightToLeft.ToString());

Вы увидите некоторые отличия:

MM/dd/yyyy
M/d/yyyy
dddd, dd MMMM yyyy
dddd, MMMM dd, yyyy
2
2
False
False

И просто подумайте, когда США потеряют основу и решают начать использовать даты европейского стиля или двигаться к метрической системе (метрическая система - инструмент дьявола! Моя машина получает сорок стержней в hogshead и что путь Мне это нравится!), InvariantCulture может просто хладнокровно и плавно оставаться таким, каким он есть. Таким образом, все те даты, которые вы спрятали в базе данных в текстовой форме с помощью InvariantCulture, будут продолжать работать...

Ответ 4

Короткий ответ да. InvariantCulture - это то, что он говорит, а не конкретная культура. Это английский, но не определенный регион.

вы можете прочитать об этом здесь: MSDN

Ответ 5

Очень важно учитывать намерение данных. Если вы используете сериализацию, обязательно используйте InvariantCulture.

Смотрите: http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx

Из документации Microsoft:

Данные динамической культуры

За исключением инвариантной культуры, данные культуры являются динамическими. Это правда даже для предопределенных культур....

Внимание!

При сохранении данных ваше приложение должно использовать культуру инвариантов, использовать двоичный формат или использовать определенный независимый от культуры формат. Данные, сохраненные в соответствии с текущими значениями, связанными с особая культура, отличная от инвариантной культуры, может стать нечитабельно или может измениться по смыслу, если эта культура изменится.

Я недавно столкнулся с этим, когда у пользователя были настройки его региона и языка на английском (США), но он выбрал свой формат даты для dd-MMM-yy. Он получил проект от клиента с датой в стандартном стандарте en-US "4/29/2010 1:45:30 PM" и кодом:

customValue = DateTime.Parse(customValue.ToString(), CultureInfo.CreateSpecificCulture( "EN-US" ));

выбрал исключение, потому что его локальные предпочтения переопределяют типичный формат в США.

Ответ 6

Я знаю, что у них разные CultureName и LCID (см. этот список).

Кроме того, символы валюты различны - ¤ для InvariantCulture и $для en-US.

От InvariantCulture:

It is used in almost any method in the Globalization namespace that requires a culture.

Предполагая, что в большинстве случаев они взаимозаменяемы. Однако имена имеют намерение штата, поэтому вы должны думать об этом при использовании CultureInfo.