C#DateTime
では、タイム ゾーン情報は格納されませんが、このインスタンスによって表される時刻が現地時間、協定世界時 (UTC)、またはネイティ( MSDNKind
を参照) のいずれに基づいているかを示す値を持つプロパティがあります。プロパティのデフォルト値はです。したがって、C# コードでは、次の行で作成された構造体
DateTime.Kind
Unspecified
DateTime
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
必ず次の方法で作成する必要があります。
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
変換の基準時間として使用するため (エポック時間の起点は 1970 年 1 月 1 日 00:00 UTCです)。
詳細については、前の質問https://stackoverflow.com/a/2883645/1236452を参照してください。
編集 1
簡単な発言: DateTime
C#では、何らかの形でタイム ゾーンを認識しています (私の現地時間は GMT+1 です)(編集: コメントと編集 2 を参照してください):
DateTime t = new DateTime(1970,1,1,0,0,0);
Console.WriteLine(t.ToLocalTime()); // 01/01/1970 01:00:00 (GMT+1)
Console.WriteLine(t.ToUniversalTime()); // 31/12/1969 23:00:00 (GMT)
編集 2
コメントで正しく指摘されているようにDateTime
、タイムゾーン情報を保持しているという意味でタイムゾーンを認識していません。ただし、そのプロパティには、ドキュメントKind
に記載されているように、インスタンスが現地時間または UTC に基づいているかどうかを示す値が格納されます。
DateTime.Kind プロパティ: このインスタンスによって表される時刻が、現地時間、協定世界時 (UTC)、またはどちらにも基づいていないかどうかを示す値を取得します。[...]
Kind プロパティを使用すると、DateTime 値に協定世界時 (UTC) または現地時間を明確に反映させることができます。対照的に、DateTimeOffset 構造体は、任意のタイム ゾーンの任意の時間を単一の時点として明確に反映できます。