DateTimeの表す時刻をToLocalTime・ToUniversalTimeメソッドで変換する場合、変換結果はKindプロパティの値によって変わります。 例えば、既にローカル時刻であるとされている値に対してToLocalTimeメソッドを呼び出しても得られる値は元の時刻と変わりませんが、ToUniversalTimeメソッドを呼び出せばUTCに変換された時刻が得られます。 DateTime.Kindの値とToLocalTime・ToUniversalTimeメソッドの結果は次のようになります。
DateTime.Kindの値 | ToLocalTimeの結果 | ToUniversalTimeの結果 |
---|---|---|
DateTimeKind.Local | 元の値と同じ | UTCに変換された値 |
DateTimeKind.Utc | ローカル時刻に変換された値 | 元の値と同じ |
DateTimeKind.Unspecified | (時刻の種類をUTCと仮定した上で) ローカル時刻に変換された値 |
(時刻の種類をローカル時刻と仮定した上で) UTCに変換された値 |
なお、ToLocalTimeメソッドが返すDateTimeのKindプロパティは当然DateTimeKind.Localとなります。 同様にToUniversalTimeはKindがDateTimeKind.UtcのDateTimeを返します。
以下の例はDateTimeKindが異なる日時のDateTimeに対してToLocalTime・ToUniversalTimeメソッドを呼び出した結果の違いを表示するものです。 なお、実行結果はタイムゾーンにUTC+9(日本標準時)が設定されている環境でのものです。
日時の変換を行わずにKindプロパティの設定値のみを変更したい場合は、SpecifyKindメソッドを使います。