如何将下面的字符串解析为DateTime ?

本文关键字:DateTime 字符串 | 更新日期: 2023-09-27 18:07:00

这是一个非常奇怪的日期,我从来没有见过JSON格式的API。

"Tue Aug 04 2015 00:17:38 GMT+0000 (UTC)"

生成以下错误:

System.FormatException: String was not recognized as a valid DateTime.

使用以下方法进行解析时是可以理解的:

DateTime.Parse(x.process_date.Value)

谁处理过复杂的日期格式,可能知道如何解析?

如何将下面的字符串解析为DateTime ?

您可以使用DateTime.ParseExact方法(或DateTime.TryParseExact,以干净地处理解析失败)来完成此操作。这些方法允许您显式指定格式字符串。

可以这样做:

var dateString = "Tue Aug 04 2015 00:17:38 GMT+0000 (UTC)";
var format = "ddd MMM dd yyyy HH:mm:ss GMT+0000 (UTC)";
var parsed = DateTime.ParseExact(
    dateString, 
    format, 
    System.Globalization.CultureInfo.InvariantCulture);

或者,使用TryParseExact:

DateTime parsed;
if (DateTime.TryParseExact(
   dateString, 
   format, 
   System.Globalization.CultureInfo.InvariantCulture, 
   DateTimeStyles.None, 
   out parsed) 
{
   // parsing was successful
}
else
{
   // parsing failed
}

下面是这里使用的格式字符串的细分:

  • ddd -星期的缩写名称。
  • MMM -月份的缩写名称。
  • dd -每月的第几天,从01到31。
  • yyyy -年份为四位数字。
  • HH:mm:ss -小时,使用24小时时钟从00到23;分钟,从00点到59点;第二个,从0到59(由:字符分隔)。
  • GMT+0000 (UTC) -只是格式字符串假定将始终存在的静态文本。这是非常脆弱的,如果API在这里返回不同的文本,可能会导致解析失败。考虑截断该文本,或者使用对时区提供强大支持的NodaTime。

您可能需要根据您的使用情况稍微调整此格式字符串—例如,从您的问题中不清楚您使用的是12小时时钟还是24小时时钟。

有关如何构建格式字符串的详细信息,请参阅MSDN上的自定义日期和时间格式字符串。

或者,您可以避免使用System.DateTime而使用NodaTime。我自己对NodaTime不太熟悉,但是在StackOverflow和NodaTime的网站上都可以找到很好的文档。