コードを表示していないため、これは単なる推測です。(質問にコードを表示してください。これにより、支援がはるかに簡単になります!)
テキサスは現在、中部標準時 (UTC-6) です。あなたが報告した時間 (1500 年、2100 年) には 6 時間の差があるので、何らかの形で2 回変換していると思います。
.Kind
にアタッチされたプロパティのおかげで、これは通常の条件下では発生しないはずDateTime
です。例えば:
DateTime dt1 = new DateTime(2013, 11, 22, 3, 0, 0, DateTimeKind.Utc);
Debug.WriteLine("{0:HH:mm} ({1})", dt1, dt1.Kind); // 3:00 (Utc)
DateTime dt2 = dt1.ToLocalTime();
Debug.WriteLine("{0:HH:mm} ({1})", dt2, dt2.Kind); // 21:00 (Local)
DateTime dt3 = dt2.ToLocalTime();
Debug.WriteLine("{0:HH:mm} ({1})", dt3, dt3.Kind); // 21:00 (Local)
しかし、どういうわけかその種類の追跡を失い、それが「未指定」に戻された場合、二重変換が発生する可能性があります:
DateTime dt1 = new DateTime(2013, 11, 22, 3, 0, 0, DateTimeKind.Utc);
Debug.WriteLine("{0:HH:mm} ({1})", dt1, dt1.Kind); // 3:00 (Utc)
DateTime dt2 = dt1.ToLocalTime();
Debug.WriteLine("{0:HH:mm} ({1})", dt2, dt2.Kind); // 21:00 (Local)
// somehow, the kind is getting set back to unspecified in your code
dt2 = DateTime.SpecifyKind(dt2, DateTimeKind.Unspecified);
DateTime dt3 = dt2.ToLocalTime();
Debug.WriteLine("{0:HH:mm} ({1})", dt3, dt3.Kind); // 15:00 (Local)
さて、実際に を呼び出している可能性は低いですDateTime.SpecifyKind
。代わりに、UTC 時間の代わりにローカル時間を DB に保存する場所をコードで探しています。
または、ローカルを文字列に変換し、その文字列を解析しDateTime
て別の文字列に読み戻すこともできます。DateTime
これは、UI コードで発生する可能性があります。Local
おそらく、フォームでユーザーから収集するときに種類を指定する必要がありますか?
コードがどのように変換されているかを確認できるように、コードをデバッグしてステップスルーする必要があります。そうすれば答えが見つかると思います。
いいえ、2013 年 8 月の Windows タイム ゾーン更新プログラムでは、米国に影響を与えるようなことは何も起こりませんでした。米国で最後に DST が変更されたのは 2007 年でした。それでも、6 時間ではなく 1 時間ずれるでしょう。