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

路易·巴伊(Louie bacaj)

从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.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的站点都可以找到出色的文档

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章