DateTime.TryParseExact 似乎无法识别字符串中的中文 AM 和 PM 指示符



我正在尝试解析包含中文AM或PM字符的日期和时间字符串。由于某种原因,datetime.tryparse方法可以在正确的日期和时间获得,但是当我尝试使用datetime.tryparseexact方法,而我看起来是正确的格式指定符/掩码,解析会失败如下。在我留下dateExact变量的默认值的地方。

这是代码:

var dateString = "2018/2/9 下午 03:55:17";
DateTime date = default(DateTime);
DateTime dateExact = default(DateTime);
// this works
DateTime.TryParse(dateString, new CultureInfo("zh-CHS"), DateTimeStyles.None, out date);
// this doesn't work
DateTime.TryParseExact(dateString, "yyyy/M/d tt HH:mm:ss", new CultureInfo("zh-CHS"), DateTimeStyles.None, out dateExact);
Console.WriteLine("Date: " + date);
Console.WriteLine("DateExact: " + dateExact);

这是输出:

日期:2/9/2018 3:55:17 PM

dateExact:1/1/0001 12:00:00 AM

" hh"表示一个小时24小时的格式。当您指出时间在PM时,必须以24小时格式为03:55:17 AM

以下对我有效:

var dateString = "2018/2/9 下午 03:55:17";
DateTime dateExact = default(DateTime);
DateTime.TryParseExact(dateString, "yyyy/M/d tt hh:mm:ss", new System.Globalization.CultureInfo("zh-CHS"), System.Globalization.DateTimeStyles.None, out dateExact);
System.Console.Write(dateExact.ToString());

请注意使用" HH"而不是" HH"

据我所知,这与中国日期无关,以下未能解析:

var dateString = "2018/2/9 PM 03:55:17";
DateTime dateExact = default(DateTime);
var result = DateTime.TryParseExact(dateString, "yyyy/M/d tt HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out dateExact);
System.Console.WriteLine(result.ToString());
System.Console.WriteLine(dateExact.ToString());

将字符串更改为" 2018/2/9 AM 03:55:17"(或" 2018/2/9 PM 15:55:17"(将导致其成功

datetime.tryparseexact似乎并没有识别中文AM和 pm指定器字符

您的指定器不是问题,因为它与.NET框架对" ZH-CHS"文化的PM指定器的定义完全匹配:

new CultureInfo("zh-CHS").DateTimeFormat.PMDesignator == "下午" // returns true

因此,问题在您的格式字符串中的其他位置:

您的输入有12个小时的时间,但您使用的是" HH",该小时代表00到23的数字。使用" HH"。

DateTime.TryParseExact(dateString, "yyyy/M/d tt hh:mm:ss",
   new CultureInfo("zh-CHS"), DateTimeStyles.None, out dateExact);

日期:09/02/2018 15:55:17

dateExact:09/02/2018 15:55:17

最新更新