在 C# 中,我试图将“2012-09-03T06:35:31Z”转换为日期时间:
Date = DateTime.ParseExact( "2012-09-03T06:35:31Z", ???);
我不确定如何解析函数的其余部分
//using System.Globalization; should be at top
Date = DateTime.ParseExact("2012-09-03T06:35:31Z", "yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal)
请参阅自定义日期和时间格式文档。这类似于sortable format,但最后有一个 Z 。
您没有说格式是否被指定为始终为 UTC 并用Z
.
如果是这样的话,那么
DateTime.ParseExact(
yourDateString, @"yyyy\-MM\-ddTHH:mm:ss\Z",
CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal)
会做得很好。
但是,如果您正在使用的标准未指定 UTC,则您必须处理的输入也可能是例如2012-09-03T06:35:31+05:00
或2012-09-03T06:35:31+0500
取决于所使用的 ISO 8601 格式 -Z
在该格式中是+00:00
. 如果您需要处理这种可能性,那么您首先要创建一个DateTimeOffset
,然后从中获取等效的 UTC DateTime
:
DateTimeOffset.ParseExact(yourDateString,
new string[]{@"yyyy\-MM\-ddTHH:mm:sszzz",@"yyyy\-MM\-ddTHH:mm:ss\Z"},
CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal).UtcDateTime
请注意,我们仍然使用AssumeUniversal
. 这是因为第二种格式是说“AZ 将出现在这里”,但该方法随后忽略了它,因此我们必须明确地将这种形式解释为 UTC。但是,对于第一种格式,zzz
将给出时区,因此将AssumeUniversal
被忽略。(或者换一种说法,除非另有说明,否则它假定通用,并且该格式确实另有说明)。
看起来您正在尝试解析 Xml 日期。如果是这种情况,我建议使用 XmlConvert 类...
Date = System.Xml.XmlConvert.ToDateTime("2012-09-03T06:35:31Z", XmlDateTimeSerializationMode.Local);
您需要将 XmlDateTimeSerializationMode 更改为适当的值。