Почему не может DateTime. ParseExact () анализируют “9/1/2009” с помощью “M/d/yyyy”

Я предполагаю от "C#", отмечают Вас, хотят достигнуть этого программно.

Попытка Aspose. Слова для.NET .

56
задан Jimmy 2 September 2009 в 16:51
поделиться

5 ответов

Я подозреваю, что проблема в том, что косая черта в строке формата отличается от косой черты в данных. Это чувствительный к культуре символ разделителя даты в строке формата, а последний аргумент null означает «использовать текущую культуру». Если вы либо избегаете косой черты («M '/' d '/' yyyy») , либо вы указываете CultureInfo.InvariantCulture , все будет в порядке. 1281] Если кому-то интересно воспроизвести это:

// Works
DateTime dt = DateTime.ParseExact("9/1/2009", "M'/'d'/'yyyy", 
                                  new CultureInfo("de-DE"));

// Works
DateTime dt = DateTime.ParseExact("9/1/2009", "M/d/yyyy", 
                                  new CultureInfo("en-US"));

// Works
DateTime dt = DateTime.ParseExact("9/1/2009", "M/d/yyyy", 
                                  CultureInfo.InvariantCulture);

// Fails
DateTime dt = DateTime.ParseExact("9/1/2009", "M/d/yyyy", 
                                  new CultureInfo("de-DE"));
91
ответ дан 26 November 2019 в 17:25
поделиться

Готов поспорить, культура вашей машины не является "en-US". Из документации :

Если поставщик является пустой ссылкой (ничего в Visual Basic), используется текущий язык и региональные параметры.

Если ваша текущая культура не является "en-" США », это объясняет, почему это работает для меня, но не работает для вас и работает, когда вы явно указываете язык и регион как« en-US ».

3
ответ дан 26 November 2019 в 17:25
поделиться

Попробуйте

Date.ParseExact("9/1/2009", "M/d/yyyy", new CultureInfo("en-US"))
2
ответ дан 26 November 2019 в 17:25
поделиться

попробуйте это

provider = new CultureInfo("en-US");
DateTime.ParseExact("9/1/2009", "M/d/yyyy", provider);

Пока.

0
ответ дан 26 November 2019 в 17:25
поделиться

Я пробовал это на XP, и это не работает, если ПК настроен на международное время yyyy-M-d. Поставьте точку останова на строке и перед ее обработкой измените строку даты так, чтобы вместо '/' использовалось '-', и вы увидите, что она работает. Не имеет значения, есть ли у вас CultureInfo или нет. Кажется странным, что можно указать экспериментальный формат, а разделитель игнорируется.

-1
ответ дан 26 November 2019 в 17:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: