2

在 C# 中,我试图将“2012-09-03T06:35:31Z”转换为日期时间:

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

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

4

3 回答 3

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)

请参阅自定义日期和时间格式文档。这类似于sortable format,但最后有一个 Z 。

于 2012-09-06T22:34:36.613 回答
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. 这是因为第二种格式是说“AZ 将出现在这里”,但该方法随后忽略了它,因此我们必须明确地将这种形式解释为 UTC。但是,对于第一种格式,zzz将给出时区,因此将AssumeUniversal被忽略。(或者换一种说法,除非另有说明,否则它假定通用,并且该格式确实另有说明)。

于 2012-09-06T23:05:39.463 回答
1

看起来您正在尝试解析 Xml 日期。如果是这种情况,我建议使用 XmlConvert 类...

Date = System.Xml.XmlConvert.ToDateTime("2012-09-03T06:35:31Z", XmlDateTimeSerializationMode.Local);

您需要将 XmlDateTimeSerializationMode 更改为适当的值。

于 2012-09-06T22:43:51.960 回答