DateTime.TryParseExact似乎没有识别字符串

时间:2018-02-15 17:25:57

标签: c# datetime

我正在尝试解析包含中文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

2 个答案:

答案 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