Учитывая следующие две культуры:
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-США"?
Да.
Например: InvariantCulture использует международный символ валюты: «¤», а не знак доллара: «$» при форматировании валюты.
Однако по большей части они очень похожи.
Изменить : Список различий между en-US
и Инвариант
:
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
Существуют некоторые фактические различия ( проверьте оба значения в окне Watch), но наиболее существенным различием является intent . InvariantCulture показывает ваше намерение проанализировать некоторые данные независимым от культуры способом, если оно связано с английским языком, тогда как en-US объявляет ваше фактическое намерение анализировать данные в соответствии с особенностями США.
Ну, если вы посмотрите, что может получиться из вашего фрагмента кода:
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
И только подумайте, когда США потеряют хребет и решат начать использовать европейский стиль дат или перейдут на метрическую систему (метрическая система - это инструмент дьявола! В моей машине сорок прутьев до свиной головы, и это мне нравится!), InvariantCulture может просто спокойно и плавно оставаться такой, какая она есть. Так что все те даты, которые вы спрятали в базе данных в текстовом виде с помощью InvariantCulture, будут продолжать работать...
Краткий ответ да. InvariantCulture - это то, что он говорит, а не конкретная культура. Это английский язык, но не конкретный регион
, вы можете прочитать об этом здесь: MSDN
Я знаю, что у них разные CultureName
и LCID
(см. этот список ) .
Кроме того, символы валюты разные - ¤ для InvariantCulture и $ для en-US.
Из InvariantCulture
:
Он используется практически в любом методе пространства имен Globalization, который требует культуры.
Предполагая, что по большей части они взаимозаменяемы. Однако в именах указывается намерение, поэтому вам следует подумать об этом при использовании CultureInfo
.