Почему DateTime.ParseExact () не может проанализировать AM / PM в «4/4/2010 16:20:00 PM», используя «M» / «d» / «гггг H»: «мм»: «ss» »тт» - PullRequest
29 голосов
/ 08 апреля 2010

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

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

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

Спасибо!

Ответы [ 3 ]

62 голосов
/ 08 апреля 2010

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

3 голосов
/ 08 апреля 2010

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

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
2 голосов
/ 08 апреля 2010

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

DateTime.ParseExact("4/4/2010 4:20:00 PM", "M/d/yyyy h:mm:ss:tt", null)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...