2012-04-02 1 views
7

Глядя наПочему TryParseExact требует CultureInfo, если я указываю точную структуру?

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

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

Вопрос

Если да, то почему я должен нужно указать CultureInfo также?

+1

Краткая версия: Вы не указали '/' или ':' –

ответ

9

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

РЕДАКТИРОВАТЬ:
Пример:

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).

+0

Пример пожалуйста ??????? –

+0

@Royi: посмотрите отредактированный ответ. – Vlad

+1

Это немецкий ('de-DE') для понедельника (но, возможно, вы можете поделиться ими с нами?) – Vlad

4

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

Представьте эту строку формата: M/D/YYYY
Эти входы корректными:

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

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

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

+0

Я не понимаю, можете ли вы объяснить? –

+0

строка «M/d/yyyy» является спецификатором формата для «4/2/2012» в культуре США, но является допустимым вводом, например, «4-2-2012» для арабской культуры.Символ «/» означает «разделитель дат по умолчанию для данной культуры». Во всяком случае, я обновил ответ на примере. –

+0

, но ** им ** рассказывал ему, что это за машины! Я написал x/xx/xxx, так что его '/' ... –

0

Вы должны сказать ему культуру, потому что если вы передаете его в формате ДД-MMM-YYYY затем переходят в 01/05/2012

В английском, который может быть 01-May-2012

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

 Смежные вопросы

  • Нет связанных вопросов^_^