Почему не может DateTime. ParseExact () анализируют/PM в “04.04.2010 16:20:00”, использующее “M'/'d'/'yyyy H':'mm':'ss' 'tt”

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

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

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

Спасибо!

30
задан Andrew Hare 8 April 2010 в 01:27
поделиться

3 ответа

Сделайте формат часов ( 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 ). Это одна из тех вещей, которые на самом деле не имеют значения, пока вы не столкнетесь с проблемами, поэтому может быть полезно иметь привычку указывать информацию о культуре.

65
ответ дан 27 November 2019 в 23:29
поделиться

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

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
ответ дан 27 November 2019 в 23:29
поделиться

Вам необходимо использовать строчную букву «h» в качестве аргумента часа в строке формата. Заглавная буква «H» представляет 24-часовое время, поэтому «4» распознается как 4 часа ночи (поскольку «16» будет означать 4 часа дня).

DateTime.ParseExact("4/4/2010 4:20:00 PM", "M/d/yyyy h:mm:ss:tt", null)
2
ответ дан 27 November 2019 в 23:29
поделиться
Другие вопросы по тегам:

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