在C#中我试图转换" 2012-09-03T06:35:31Z"进入日期时间:
Date = DateTime.ParseExact( "2012-09-03T06:35:31Z", ???);
我不确定如何解析函数的其余部分
答案 0 :(得分:2)
//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)
请参阅custom date and time format documentation。这类似于sortable format,但最后有一个Z.
答案 1 :(得分:2)
您没有说明格式是否始终以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
。这是因为第二种格式是“A Z将出现在这里”,但该方法会忽略它,因此我们必须明确地将此形式解释为UTC。但是,使用第一种格式时,zzz
将给出时区,因此忽略AssumeUniversal
。 (或者换句话说,除非另有说明,否则它是普遍的,而且这种格式的确如此。)
答案 2 :(得分:1)
看起来您正在尝试解析Xml日期。如果是这种情况,我建议使用XmlConvert类......
Date = System.Xml.XmlConvert.ToDateTime("2012-09-03T06:35:31Z", XmlDateTimeSerializationMode.Local);
您需要将XmlDateTimeSerializationMode更改为适当的值。