Заполнение объекта DateTime этой строкой 03-06-2012 08:00 am

Как заполнить объект C# DateTime из этой строки "03-06-2012 08:00 am".

Я пытаюсь какой-то код следующего типа:

DateTime lectureTime  = DateTime.Parse("03-06-2012 08:00 am");

Я использую этот плагин http://trentrichardson.com/examples/timepicker/ на основе jQuery для генерации даты и времени.

Обновить --

Так много ответов ниже и много вещей, чтобы прояснить основы для этой небольшой проблемы. Из приведенного ниже снимка вы можете увидеть, что я пробовал и что я получил во время отладки в Visual Studio.

3 ответа

Решение

Вам нужно использовать DateTime.ParseExact. Что-то вроде

DateTime lectureTime  = DateTime.ParseExact("03-06-2012 08:00 am", "dd-MM-yyyy hh:mm tt", CultureInfo.InvariantCulture);
string lectureTime = "03-06-2012 08:00 am";
DateTime time = DateTime.ParseExact(lectureTime , "dd-MM-yyyy hh:mm tt", CultureInfo.InvariantCulture);
  • дд: дни [00-31]
  • ММ: месяцы [00-12]
  • гггг: годы [0000-9999]
  • '-': они разделены тире
  • чч: часы [00-12]
  • мм: минуты [00-60]
  • tt: время [am, pm] (без учета регистра)

Если у вас правильная культура, ваш код работает без изменений. Но вы можете использовать форматирование даты, отличное от программы, которая сгенерировала строку.

Я бы рекомендовал всегда указывать CultureInfo когда:

  • Разбор DateTime генерируется другой системой.
  • Вывод DateTime это будет проанализировано другой системой (не только показанной вашему пользователю).

Попробуй это:

CultureInfo cultureInfo = new CultureInfo("en-GB"); // Or something else?
DateTime lectureTime  = DateTime.Parse("03-06-2012 08:00 am", cultureInfo);

Посмотрите, как работает онлайн: ideone

Разница между DateTime.Parse а также DateTime.ParseExact

Если вы хотите, чтобы.NET приложил все усилия для разбора строки, используйте DateTime.Parse, Он может обрабатывать широкий спектр распространенных форматов.

Если вы заранее точно знаете, как должны быть отформатированы даты, и хотите отклонить все, что отличается от этого формата (даже если оно может быть проанализировано правильно и без неоднозначности), используйте DateTime.ParseExact,

Другие вопросы по тегам