DateTime は、タイム ゾーンに関する情報を格納しません。documentationによるとTimeZoneInfo.ConvertTime
、 DateTime.Kind プロパティを使用して、時刻の変換方法を決定します。
- DateTimeKind.Local および DateTimeKind.Unspecified: 現地時間を destinationTimeZone の時間に変換します。
- DateTimeKind.Utc: 協定世界時 (UTC) を destinationTimeZone の時刻に変換します。
2 番目のパラメーター (目的のタイム ゾーンを指定する) にを使用TimeZoneInfo.Local
しているため、DateTimeKind が Local または Unspecified であると想定しています。したがって、ローカル日付をローカル日付に変換していますが、これは明らかに機能しません。
DateTime.ToLocalTime
DateTimeKind も使用します。ドキュメントによると:
- Utc: DateTime のこのインスタンスは現地時間に変換されます。
- ローカル: 変換は実行されません。
- Unspecified: この DateTime のインスタンスは UTC 時間であると見なされ、Kind が Utc であるかのように変換が実行されます。
基本的に、TimeZoneInfo.ConvertTime
DateTimeKind.Unspecified = Local とDateTime.ToLocalTime
見なしますが、DateTimeKind.Unspecified = Utc と見なします。前者が機能しないのに後者が機能する理由を説明します。