如何将下面的字符串解析为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.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的网站上都可以找到很好的文档。