C#DateTime.ParseExact for“2012-09-03T06:35:31Z”

时间:2012-09-06 22:29:07

标签: c# datetime

在C#中我试图转换" 2012-09-03T06:35:31Z"进入日期时间:

Date = DateTime.ParseExact( "2012-09-03T06:35:31Z", ???);

我不确定如何解析函数的其余部分

3 个答案:

答案 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:002012-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更改为适当的值。