C# 将带有时区的ISO 8601解析为.NET datetime
我有一个格式为的时间戳:C# 将带有时区的ISO 8601解析为.NET datetime,c#,.net,datetime,iso8601,C#,.net,Datetime,Iso8601,我有一个格式为的时间戳: YYYY-MM-DDThh:mm:ss[.nnnnnnn][{+|-}hh:mm] YYYY-MM-DDThh:mm:ss[{+|-}hh:mm] 示例: 2013-07-03T02:16:03.000+01:00 2013-07-03T02:16:03+01:00 如何将其解析为.NET FrameworkDateTime,并提供正确的TimeZone DateTime.TryParse不起作用,因为有关时区的尾随信息应该可以使用DateTimeOffset和
YYYY-MM-DDThh:mm:ss[.nnnnnnn][{+|-}hh:mm]
YYYY-MM-DDThh:mm:ss[{+|-}hh:mm]
示例:
2013-07-03T02:16:03.000+01:00
2013-07-03T02:16:03+01:00
如何将其解析为.NET FrameworkDateTime
,并提供正确的TimeZone
DateTime.TryParse
不起作用,因为有关时区的尾随信息应该可以使用DateTimeOffset
和。然后,如果愿意,您可以将其转换为DateTime
。示例代码:
using System;
using System.Globalization;
class Test
{
static void Main()
{
string text = "2013-07-03T02:16:03.000+01:00";
string pattern = "yyyy-MM-dd'T'HH:mm:ss.FFFK";
DateTimeOffset dto = DateTimeOffset.ParseExact
(text, pattern, CultureInfo.InvariantCulture);
Console.WriteLine(dto);
}
}
需要注意的一点是,这个名称很糟糕——它实际上不是一个时区,它只是一个UTC偏移量。它实际上并没有告诉你原来的时区。(可以有多个不同的时区同时观测相同的偏移。)
或者使用(不稳定版本,很快将成为1.2):
可能重复的
string text = "2013-07-03T02:16:03.000+01:00";
OffsetDateTimePattern pattern = OffsetDateTimePattern.ExtendedIsoPattern;
OffsetDateTime odt = pattern.Parse(text).Value;
Console.WriteLine(odt);