DateTime.ParseExact указывает, что String не была признана допустимым DateTime.

Я пытаюсь проанализировать строку даты в переменной DateTime. Я узнал, что ParseExact - это способ сделать это, но я попробую это получить ошибку:

Строка не была признана допустимым DateTime.

string timeFormat = "dd-MM-yyyy hh:mm:ss";
DateTime startDate = DateTime.ParseExact(reader["startdate"].ToString(), timeFormat, CultureInfo.InvariantCulture);
DateTime nextDate = DateTime.ParseExact(reader["nextdate"].ToString(), timeFormat, null);

Я пробовал как с null (который работает на другой странице), так и с CultureInfo.InvariantCulture.

reader["startdate"].ToString() вывод: 08-08-2012 15:39:09

и

reader["nextdate"].ToString() вывод: 08-08-2012 15:39:09

Я думаю, что он должен работать, но это не так.

У кого-то есть идея, что не так?:)

Ответ 2

Скорее всего, из-за различий между локали вашего сервера и локали пользовательского интерфейса

Еще один простой способ - указать детали глобализации в web.config

как

<configuration>
   <system.web>
      <globalization culture="en-GB"/>
   </system.web>
</configuration>

ИЛИ более подробно

<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="en-GB" uiCulture="en-GB" />

Но будьте уверены, что это не столкнутся с вашим приложением вообще

Ответ 3

попробуйте это, он работает

DateTime.ParseExact("01-08-2012 15:36:25", "dd-MM-yyyy HH:mm:ss", null);

Ответ 4

Я не уверен, что это помогает, но я использовал точный код из этой статьи, и он работал у меня, потому что DateTime.ParseExact(dat, "dd/MM/yyy HH: MM", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None) не работал у меня.

Прочтите это, я просто разместил его в Интернете: http://rochcass.wordpress.com/2012/08/27/error-string-was-not-recognized-as-a-valid-datetime-solution/#more-350