Почему TryParseExact требует CultureInfo, если я укажу точную структуру? - PullRequest
7 голосов
/ 02 апреля 2012

Глядя на

DateTime.TryParseExact(dateString, "M/d/yyyy hh:mm:ss tt",
                           CultureInfo.InvariantCulture, 0, out dateValue)

Я предоставил точную структуру для поиска: M/d/yyyy hh:mm:ss tt

Вопрос

Если это так, зачем мне также указывать CultureInfo?

Ответы [ 3 ]

9 голосов
/ 02 апреля 2012

Ну, названия месяцев тоже можно локализовать. И, возможно, в некоторых экзотических культурах годы считаются и по-другому.

EDIT:
Пример:

string x = "Montag, 2. April 2012";
DateTime dt1, dt2;
bool r1 = DateTime.TryParseExact(x, "D", new CultureInfo("de-DE"), 0, out dt1);
bool r2 = DateTime.TryParseExact(x, "D", new CultureInfo("en-US"), 0, out dt2);

(r1 == true, r2 == false).

Или наоборот:

string y = "Monday, April 02, 2012";
DateTime dt3, dt3;
bool r3 = DateTime.TryParseExact(y, "D", new CultureInfo("de-DE"), 0, out dt3);
bool r4 = DateTime.TryParseExact(y, "D", new CultureInfo("en-US"), 0, out dt4);

(r3 == false, r2 == true).

4 голосов
/ 02 апреля 2012

Поскольку строка формата не является литеральной. Например, вы использовали "/" и ":", но для входной строки необходимо использовать разделители date и time , предоставляемые CultureInfo.

Представьте эту строку формата: M / d / yyyy
Все эти данные действительны:

  • 04/02/2012 (для инвариантной культуры, США);
  • 04.02.2012 (для Финляндии)
  • 04-02-2012 (для Марокко)

Кроме того, простой спецификатор "M" может быть [1..12] или [1..13], в зависимости от самого календаря (см. MSDN).

Функция «свеча на торте» является общей, поэтому вам может потребоваться в строке формата локализованное (или зависящее от страны) значение (например, названия дней недели или год, указанный, например, на китайском или японском языке).

0 голосов
/ 02 апреля 2012

Вы должны сказать это культуре, потому что если вы передадите его в формате дд-ммм-гггг затем перейдите 01/01/2012

На английском языке это может быть 01-May-2012

Но в другой культуре это будет 01-Май-2012

...