Я использую c#, и если я делаю
DateTime.ParseExact("4/4/2010 4:20:00 PM", "M'/'d'/'yyyy H':'mm':'ss' 'tt", null)
Возвращаемое значение всегда является 4:20 - что я делаю неправильно с использованием tt?
Спасибо!
Сделайте формат часов ( 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
). Это одна из тех вещей, которые на самом деле не имеют значения, пока вы не столкнетесь с проблемами, поэтому может быть полезно иметь привычку указывать информацию о культуре.
Попробуйте следующее:
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
Вам необходимо использовать строчную букву «h» в качестве аргумента часа в строке формата. Заглавная буква «H» представляет 24-часовое время, поэтому «4» распознается как 4 часа ночи (поскольку «16» будет означать 4 часа дня).
DateTime.ParseExact("4/4/2010 4:20:00 PM", "M/d/yyyy h:mm:ss:tt", null)