2014-01-17 128 views

回答

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 
+0

这工作完美! – Pramod

3

DateTime.ParseExact

使用指定的格式和区域性特定 格式信息的日期和时间其 日期时间等效的指定字符串表示形式转换。 字符串表示的格式必须完全匹配 指定的格式。

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

你可以像使用它;

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

欲了解更多信息,请看看;

0

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

你有两种选择正确解析它:

  • 你可以把它解析为DateTimeDateTimeKind.Utc为它的.Kind属性:

    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的含义。