Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将带有时区的ISO 8601解析为.NET datetime_C#_.net_Datetime_Iso8601 - Fatal编程技术网

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 Framework
DateTime
,并提供正确的
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);