Parsing ISO 8601 with timezone to .NET datetime

后端 未结 1 1863
不思量自难忘°
不思量自难忘° 2020-12-03 17:54

I have an ISO 8601 timestamp in the format:

YYYY-MM-DDThh:mm:ss[.nnnnnnn][{+|-}hh:mm]

YYYY-MM-DDThh:mm:ss[{+|-}hh:mm]

Examples:

         


        
1条回答
  •  庸人自扰
    2020-12-03 18:26

    You should be able to format it using DateTimeOffset and the K custom format specifier. You can then convert that to a DateTime afterwards if you want to. Sample code:

    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);
        }
    }
    

    One thing to note is that this is badly named - it's not actually a time zone, it's just a UTC offset. It doesn't actually tell you the original time zone. (There can be several different time zones observing the same offset at the same time.)

    Or with Noda Time (unstable version, which will become 1.2 pretty soon):

    string text = "2013-07-03T02:16:03.000+01:00";
    OffsetDateTimePattern pattern = OffsetDateTimePattern.ExtendedIsoPattern;
    OffsetDateTime odt = pattern.Parse(text).Value; 
    Console.WriteLine(odt);
    

    0 讨论(0)
提交回复
热议问题