Я предполагаю от "C#", отмечают Вас, хотят достигнуть этого программно.
Попытка Aspose. Слова для.NET .
Я подозреваю, что проблема в том, что косая черта в строке формата отличается от косой черты в данных. Это чувствительный к культуре символ разделителя даты в строке формата, а последний аргумент 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"));
Готов поспорить, культура вашей машины не является "en-US". Из документации :
Если поставщик является пустой ссылкой (ничего в Visual Basic), используется текущий язык и региональные параметры.
Если ваша текущая культура не является "en-" США », это объясняет, почему это работает для меня, но не работает для вас и работает, когда вы явно указываете язык и регион как« en-US ».
Попробуйте
Date.ParseExact("9/1/2009", "M/d/yyyy", new CultureInfo("en-US"))
попробуйте это
provider = new CultureInfo("en-US");
DateTime.ParseExact("9/1/2009", "M/d/yyyy", provider);
Пока.
Я пробовал это на XP, и это не работает, если ПК настроен на международное время yyyy-M-d. Поставьте точку останова на строке и перед ее обработкой измените строку даты так, чтобы вместо '/' использовалось '-', и вы увидите, что она работает. Не имеет значения, есть ли у вас CultureInfo или нет. Кажется странным, что можно указать экспериментальный формат, а разделитель игнорируется.