Если вы используете VS 2013 Update 5, вы должны вручную установить обновление 2.8.7 для NuGet Packet Manager.
Да.
Например: 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
Короткий ответ «да». InvariantCulture - это то, что он говорит, а не конкретная культура. Это английский, но не определенный регион
, вы можете прочитать об этом здесь: MSDN
Очень важно учитывать намерение данных. Если вы выполняете сериализацию, обязательно используйте InvariantCulture.
Смотрите: http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx
Из документации microsoft:
Данные динамической культуры
За исключением инвариантной культуры данные культуры являются динамическими. Это справедливо даже для предопределенных культур. ...
Внимание
При сохранении данных ваше приложение должно использовать культуру инвариантов, использовать двоичный формат или использовать определенный культурно-независимый формат. Данные, сохраненные в соответствии с текущими значениями, связанными с определенной культурой, отличными от инвариантной культуры, могут стать нечитаемыми или могут измениться по смыслу, если эта культура изменится.
Я недавно столкнулся с этим, когда пользователь установил свои настройки для региона и языка на английский (США), но выбрал свой личный формат даты для dd-MMM-yy. Он получил проект от клиента с датой в стандартном формате по-американски «4/29/2010 1:45:30 PM» и кодом:
customValue = DateTime.Parse ( custom_alue.ToString (), CultureInfo.CreateSpecificCulture («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
И подумайте, когда США теряют основу и решают начать использовать даты европейского стиля или двигаться к метрической системе (метрическая система - инструмент дьявола! Моя машина получает сорок стержней в hogshead, и так мне нравится!), InvariantCulture может просто прохладно и плавно оставаться таким, каким оно есть. Таким образом, все те даты, которые вы спрятали в базе данных в текстовой форме с использованием InvariantCulture, будут продолжать работать ...
Я знаю, что у них разные CultureName
и LCID
(см. этот список ).
Кроме того, символы валюты различны - ¤ для InvariantCulture и $ for en-US.
Из InvariantCulture
:
It is used in almost any method in the Globalization namespace that requires a culture.
Предполагая, что в большинстве случаев они взаимозаменяемы , Однако имена имеют намерение штата, поэтому вы должны думать об этом при использовании CultureInfo
.
Есть некоторые фактические различия (проверьте оба значения в окне Watch), но наиболее важным отличием является намерение . InvariantCulture показывает вашу цель анализировать некоторые данные в независимой культуре, если это связано с английским языком, в то время как en-US заявляет о вашем фактическом намерении анализировать данные в специфической для США форме.
M/d/yyyy
вместо нормальногоyyyy-MM-dd
. – Sasha 28 August 2017 в 10:35