111

.Net DateTime には、それが作成されたタイム ゾーンに関する情報が含まれていますか?

最後に「+zz」を含む形式からDateTimeを解析するライブラリがあり、正しく解析して現地時間を調整しますが、DateTimeオブジェクトから特定のタイムゾーンを取得する必要があります。

これはまったく可能ですか?私が見ることができるのは、時刻がローカルか UTC かを指定する DateTime.Kind だけです。

4

7 に答える 7

150

DateTime 自体には、実際のタイムゾーン情報は含まれていません。UTCかローカルかはわかるかもしれませんが、ローカルが実際に何を意味するかはわかりません。

DateTimeOffset の方がやや優れています。これは基本的に UTC 時間とオフセットです。ただし、多くの異なるタイムゾーンが任意の時点で同じオフセットを持つ可能性があるため、タイムゾーンを決定するにはまだ十分ではありません。ただし、日付/時刻を解析するときに操作する必要があるのはオフセットだけであるため、これで十分なように思えます。

.NET 3.5 の時点でのタイム ゾーンのサポートは、以前よりもはるかに優れていますが、標準の "ZonedDateTime" またはそのようなもの (UTC 時間と実際のタイム ゾーン) が本当に必要です。独自のものを構築するのは簡単ですが、標準ライブラリで見られるとよいでしょう。

編集: ほぼ 4 年後、日付/時刻型のかなり豊富なセットを持つNoda Timeを使用することをお勧めします。Noda Timeの主な著者として、私は偏見があります:)

于 2009-02-23T07:07:30.753 に答える
38

いいえ。

開発者は、何らかの外部メカニズムを介して、DateTime 値に関連付けられたタイム ゾーン情報を追跡する責任があります。

優れた記事からの引用ここ. すべての .Net 開発者にとって必読の書です。

したがって、私のアドバイスは、ニーズに合った小さなラッパー クラスを作成することです。

于 2009-02-23T07:03:57.453 に答える
5

.NET用のパブリックドメインのTimeZoneライブラリがあります。本当に便利です。それはあなたのニーズに答えます。

一般的なタイムゾーンの問題を解決することは、あなたが思っているよりも難しいです。

于 2009-02-24T06:56:26.807 に答える
3

TimeZoneInfoクラスを使用できます

TimeZone クラスはローカル タイム ゾーンを認識し、協定世界時 (UTC) とローカル時間の間で時間を変換できます。TimeZoneInfo オブジェクトは任意のタイム ゾーンを表すことができ、TimeZoneInfo クラスのメソッドを使用して、あるタイム ゾーンの時刻を別のタイム ゾーンの対応する時刻に変換できます。TimeZoneInfo クラスのメンバーは、次の操作をサポートしています。

  1. オペレーティング システムによって既に定義されているタイム ゾーンを取得します。

  2. システムで利用可能なタイム ゾーンを列挙します。

  3. 異なるタイム ゾーン間の時刻の変換。

  4. オペレーティング システムによってまだ定義されていない新しいタイム ゾーンを作成します。

    後で取得するためにタイム ゾーンをシリアル化します。

于 2012-03-13T15:25:00.617 に答える
1

API ( http://msdn.microsoft.com/en-us/library/system.datetime_members(VS.71).aspx ) からは、使用されているタイム ゾーンの名前を表示できないようです。

于 2009-02-23T07:05:10.493 に答える