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

カスタムフォーマット指定子DateTimeOffsetを使用してフォーマットできるはずです。必要に応じて、それをその後に変換できます。サンプルコード:KDateTime

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

注意すべきことの 1 つは、これは不適切な名前であるということです。これは実際にはタイム ゾーンではなく、単なる 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 に答える