【问题标题】:Parsing ISO 8601 with timezone to .NET datetime将带时区的 ISO 8601 解析为 .NET 日期时间
【发布时间】:2013-07-25 11:54:33
【问题描述】:

我有一个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

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

DateTime.TryParse 不起作用,因为有关 TimeZone 的尾随信息。

【问题讨论】:

标签: c# .net datetime iso8601


【解决方案1】:

您应该能够使用DateTimeOffsetK custom format specifier 对其进行格式化。然后,您可以根据需要将其转换为 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    相关资源
    最近更新 更多