我正在编写一个程序来读取日志文件,并一路转换时间戳。目前,我正在使用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,但没有任何行为更改。
任何见识都非常感谢!
答案 0 :(得分:7)
似乎您可能使用的是“ H”标识符而不是“ h”。这是预期的行为,因为24小时使用大写字母“ H”。使用小写的“ h”应该可以解决此问题。
例如,格式将变为:
string format = "M/dd/yyyy h:mm:ss tt";