2016-08-27 2 views
1

У меня возникла проблема с анализом строкового представления значения DateTime обратно в экземпляр DateTime с использованием метода DateTime.ParseExact(..).DateTime TryParseExact не анализирует подобную строку?

По какой-то причине использование похожих форматированных строк (или, может быть, я слеп) с разными значениями работает для значения A) и не имеет другого значения для значения b), и я должен что-то пропустить здесь .. но я просто могу " т найти:

var d1 = "14/10/2013 2:16:18 PM"; 
var d2 = "27/08/2016 12:20:34 PM"; 

var dFormat = "dd/MM/yyyy H:mm:ss tt"; 

DateTime dt = DateTime.MinValue; // out value for .TryParseExact(..) 
var tryParseResultD1 = DateTime.TryParseExact(d1, dFormat, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AssumeUniversal, out dt); 
var tryParseResultD2 = DateTime.TryParseExact(d2, dFormat, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AssumeUniversal, out dt); 

tryParseResultD1.Dump(); // << returns False 
tryParseResultD2.Dump(); // << returns True 

.. почему-то пытается разобрать «d1» строка не работает, но разборе «d2» делает, и я не знаю, почему.

Кто-нибудь знает или видит, что здесь происходит?

+0

Вы должны изменить «H» для «ч», как «ч» представляет _The час, используя 12-часовые часы от 1 до 12_ и 'H' представляет собой час, используя 24-часовой такт от 0 до 23_ –

+0

О, мой .. да .. Я тоже это видел - спасибо @MartinParkin !! –

ответ

3

Вы должны изменить H на h.

h представляет Часы, используя 12-часовые часы от 1 до 12.

H представляет Час, используя 24-часовое время от 0 до 23.

В вашем случае, если вы хотите 12-часовые часы от 1 до 12:

var dFormat = "dd/MM/yyyy h:mm:ss tt"; 
+0

Хороший улов, спасибо! –

0

Можете ли вы попытаться изменить H для h в формате var dFormat?

Если я прав, то h обозначает 12-часовое обозначение и H в течение 24 часов.

+0

Ваш ответ может быть неправильным; 'hh' _ _ час, используя 12-часовые часы с 01 до 12_, поэтому на самом деле он должен использовать' h'. Вы можете ясно видеть, что он использует одноразрядный час. –