Подтвердить что ты не робот

Почему can not DateTime.ParseExact() анализирует AM/PM в "4/4/2010 4:20:00 PM", используя "M" /'d'/'yyyy H': 'mm': 'ss' 'tt "

Я использую С#, и если я делаю

DateTime.ParseExact("4/4/2010 4:20:00 PM", "M'/'d'/'yyyy H':'mm':'ss' 'tt", null)

Возвращаемое значение всегда 4:20 AM - что я делаю неправильно с помощью tt?

Спасибо!

4b9b3361

Ответ 1

Сделайте часовой формат (H) в нижнем регистре, например:

DateTime.ParseExact(
            "4/4/2010 4:20:00 PM", 
            "M/d/yyyy h:mm:ss tt", 
            CultureInfo.InvariantCulture);

Верхний регистр "H" указывает на 24-часовое время, а нижний регистр "h" указывает на 12-часовое время и будет соблюдать AM/PM в строке кандидата.

Боковое примечание. Лучше всего предоставить экземпляр IFormatProvider для таких методов (даже если это просто CultureInfo.InvariantCulture). Это одна из тех вещей, которая на самом деле не имеет значения до тех пор, пока вы не столкнетесь с проблемами с ней, поэтому может быть полезно иметь привычку указывать информацию о культуре.

Ответ 2

Попробуйте следующее:

Console.WriteLine(DateTime.ParseExact("4/4/2010 4:20:00 PM", "M'/'d'/'yyyy h':'mm':'ss tt", null));

Выводится:

 4/4/2010 4:20:00 PM

Ответ 3

Вам нужно использовать строчный "h" для аргумента hour в строке формата. Верхний регистр "H" представляет собой 24-часовое время, поэтому "4" распознается как 4 часа ночи (так как "16" - это 4 часа дня).

DateTime.ParseExact("4/4/2010 4:20:00 PM", "M/d/yyyy h:mm:ss:tt", null)