DateTime.TryParseExact () не распознает указатель PM, AM работает как положено - PullRequest
1 голос
/ 06 мая 2019

Я пишу программу для чтения лог-файлов, конвертируя временные метки по пути. В настоящее время я использую DateTime.TryParseExact() для быстрого анализа временных меток, чтобы убедиться, что все правильно. Проблема, с которой я сталкиваюсь, заключается в том, что распознаются только обозначения AM, PM работают без проблем. Я выделил проблему в следующем фрагменте:

string format = "M/dd/yyyy H:mm:ss tt";

string teststringPM = "1/21/2019 3:25:32 PM";
string teststringAM = "1/21/2019 3:25:32 AM";

DateTime placeholderPM;
DateTime placeholderAM;

DateTime.TryParseExact(teststringPM, format, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out placeholderPM);
DateTime.TryParseExact(teststringAM, format, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out placeholderAM);

Console.WriteLine("placeholderPM:");
Console.WriteLine(placeholderPM.ToString());

Console.WriteLine("placeholderAM:");
Console.WriteLine(placeholderAM.ToString());

Вывод из этого выглядит следующим образом:

placeholderPM:
1/1/0001 12:00:00 AM

placeholderAM:
1/21/2019 3:25:32 AM

Мы видим, что placeholderPM - это новое значение даты и времени по умолчанию. Я попытался изменить IFormatProvider на en-US без каких-либо изменений в поведении.

Любое понимание высоко ценится!

1 Ответ

7 голосов
/ 06 мая 2019

Похоже, вы могли бы использовать идентификатор 'H' вместо 'h'.Это ожидаемое поведение, так как верхний регистр 'H' используется в течение 24 часов.Использование строчной буквы 'h' должно решить эту проблему.

Например, формат будет выглядеть так:

string format = "M/dd/yyyy h:mm:ss tt";

Это более подробно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...