11

我有一个格式为ISO 8601的时间戳:

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

如何将其解析为DateTime提供正确的 .NET Framework TimeZone

DateTime.TryParse不起作用,因为有关TimeZone.

4

1 回答 1

16

您应该能够使用DateTimeOffsetK自定义格式说明符对其进行格式化。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 偏移量。它实际上并没有告诉您原始时区。(可以有几个不同的时区同时观察相同的偏移量。)

或者使用Noda Time(不稳定的版本,很快就会变成 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);
于 2013-07-25T11:58:43.737 回答