从美国时区到日期时间的解析日期时间。

时间:2014-01-17 13:16:14

标签: c# vb.net datetime

如何解析日期时间字符串?

2014-01-17T09:59:24.000Z

我试过下面的代码,但它没有用。

DateTime.ParseExact("2014-01-17T09:59:24.000Z", "ddd MMM dd HH:mm:ss %zzzz yyyy", CultureInfo.InvariantCulture);

3 个答案:

答案 0 :(得分:3)

来自DateTime.ParseExact

  

将指定的日期和时间字符串表示形式转换为它   DateTime等效使用指定的格式和特定​​于文化   格式信息。 字符串表示的格式必须匹配   完全符合指定的格式。

显然你的字符串表示和格式是不一样的。

您可以像使用它一样使用

var date = DateTime.ParseExact("2014-01-17T09:59:24.000Z",
                               "yyyy-MM-dd'T'HH:mm:ss.fff'Z'", 
                                CultureInfo.InvariantCulture);
Console.WriteLine(date);

输出将是;

1/17/2014 9:59:24 AM

这里有 demonstration

有关更多信息,请查看;

答案 1 :(得分:3)

使用类似“2014-01-17T09:59:24.000Z”的字符串

您可以使用DateTime.Parse("2014-01-17T09:59:24.000Z")

来自The Documentation

要解析的字符串可以采用以下任何一种形式:

包含时区信息并符合ISO 8601的字符串。在以下示例中,第一个字符串指定协调世界时(UTC),第二个字符串指定比UTC早7小时的时区中的时间:

2008-11-01T19:35:00.0000000Z 

2008-11-01T19:35:00.0000000-07:00

答案 2 :(得分:0)

您拥有的值2014-01-17T09:59:24.000ZISO8601 / RFC3339格式的时间戳。最后的Z是重要的,这意味着它代表UTC。

正确解析它有两个选项:

  • 您可以将其解析为DateTime DateTimeKind.Utc .Kind属性{/ 1}}:

    DateTime dt = DateTime.ParseExact("2014-01-17T09:59:24.000Z",
                                      "yyyy-MM-dd'T'HH:mm:ss.fffK",
                                      CultureInfo.InvariantCulture,
                                      DateTimeStyles.RoundtripKind);
    
  • 或者,您可以将其解析为DateTimeOffset,其中UTC将对应于零偏移:

    DateTimeOffset dt = DateTimeOffset.ParseExact("2014-01-17T09:59:24.000Z",
                                                  "yyyy-MM-dd'T'HH:mm:ss.fffK",
                                                  CultureInfo.InvariantCulture);
    

此处的其他一些答案很接近,但是忘记使用Z说明符和K参数实际考虑字符串中的DateTimeStyles.RoundtripKind。这些非常重要,因为如果没有它们,您最终可能会得到DateTime的结果DateTimeKind.Unspecified,在某些时区转换函数中可能会被视为本地时间。如果您使用我给您的任一选项,则保留Z的含义。

相关问题