解析日期时间从美国时区到日期时间。
问题描述:
如何解析日期时间字符串?解析日期时间从美国时区到日期时间。
2014-01-17T09:59:24.000Z
我试过下面的代码,但它的,不工作。
DateTime.ParseExact("2014-01-17T09:59:24.000Z", "ddd MMM dd HH:mm:ss %zzzz yyyy", CultureInfo.InvariantCulture);
答
有了这样一个字符串 “2014-01-17T09:59:24.000Z”
你可以使用DateTime.Parse("2014-01-17T09:59:24.000Z")
要解析的字符串可以采用以下任意形式:
一个字符串,包含时区信息并符合ISO 8601。在下面的例子中,第一个字符串指定协调世界时(UTC),第二个字符串指定的时间,这比UTC早7小时时区:
2008-11-01T19:35:00.0000000Z
2008-11-01T19:35:00.0000000-07:00
答
使用指定的格式和区域性特定 格式信息的日期和时间其 日期时间等效的指定字符串表示形式转换。 字符串表示的格式必须完全匹配 指定的格式。
显然你的字符串表示和格式是不一样的。
你可以像使用它;
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
。
欲了解更多信息,请看看;
答
你拥有的价值,2014-01-17T09:59:24.000Z
是ISO8601/RFC3339格式化的时间戳。最后的Z
是重要的,这意味着它代表UTC。
你有两种选择正确解析它:
-
你可以把它解析为
DateTime
有DateTimeKind.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
的含义。
这工作完美! – Pramod