オブジェクトにキャストしている文字列の形式で日付/時刻の値を取得していDateTime
ます。
eg. 2012-11-10 11:37:06
今回は、システムの現地時間とは異なるタイムゾーンからのものであることを知っています。
オブジェクトにタイムゾーンを割り当ててDateTime
、自分のローカル タイムゾーンで時間を正確に表し、夏時間の変更に対応できるようにするにはどうすればよいですか?
ADateTime
はタイム ゾーンではなく、タイム ゾーンを完全には認識していません。はKind
、システム タイム ゾーン ( Local
)、UTC ( Universal
)、または「その他」 ( Unspecified
) のいずれにあるかを示します。
がありますがDateTimeOffset
、これは に似てDateTime
いますが、UTC からのオフセットもあります。ただし、これはタイム ゾーンを持つことと同じではありません。ローカル タイムが他の時点でどうなるかはわかりません。
私は偏見がありますが、さまざまな概念を表すためにあらゆる種類の型を持つ私のNoda Timeを使用することをお勧めします。
ZonedDateTime
- あいまいな場合に備えて、UTC からのオフセットを含む、特定のタイム ゾーンのローカル日付/時刻OffsetDateTime
- UTC からのオフセットを持つローカルの日付/時刻 (ただし、特定のタイム ゾーンはありません)LocalDateTime
- 特定のタイムゾーンやオフセットのない、ローカルの日付/時刻のみLocalDate
- 時間コンポーネントまたはゾーンのない日付LocalTime
- 日付またはゾーンなしの日付の時刻のみこれらにはすべて、関連付けられた暦体系もあります ( とは異なりDateTime
ます)。ほんの一瞬Instant
、Unix エポックから数ティックしかありません。
BCL 型に固執したい場合は、独自のデータ型DateTime
で a を保持できます。TimeZoneInfo
TimeZoneInfo.ConvertTimeToUtcはおそらくあなたが望むことをします。
このようにして、すべての時刻を (インポート時に) 変換してUTCとして保存し(元の時刻が関連付けられているタイム ゾーンの夏時間オフセットなどを知っていると仮定して)、その後は任意のタイム ゾーンで表示できます。DateTime
とTimeZoneInfo
オブジェクトの両方を取るオーバーロード メソッドにリンクしました。
TimeZoneInfo
このような変換に役立つ方法は他にもあります。