我正在尝试解析包含中文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
答案 0 :(得分:2)
" 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")将使其成功
答案 1 :(得分:0)
DateTime.TryParseExact似乎没有识别中文AM和 字符串中的PM指示符字符
您的指示符不是问题,因为它完全符合.NET Framework对“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