XPおよびWindows7で次のことを行うと、.NET4コンソールアプリケーションと.NET2コンソールアプリケーションで異なる結果が得られます。
Console.WriteLine(String.Format("DateTime.Parse on Client: {0}",
DateTime.Parse("1998-10-31T00:00:00-04:00")));
.NET4
XPではこれは次のようになります: 10/31/1998 12:00:00 AM
Windows 7 / Windows 8ではこれは次のようになります: 10/30/1998 11:00:00 PM
.NET2
XPの場合、これは次のようになります: 10/31/1998 12:00:00 AM
Windows 7 / Windows 8の場合、これは次のようになります: 10/31/1998 12:00:00 AM
どうして??!?
文字列からTimeZone(-04:00)を削除すると、.NET4のXPとWindows7の両方で値が同じになります。Windows XPは、文字列からDateTime.Parseを実行するときに、.NET4でタイムゾーンオフセットを異なる方法で適用するようです。この動作を変更して、.NET4で一貫性を保ち、OSに依存しないようにする方法はありますか(DateTime.Parseに送信される文字列を操作する必要はありません)。
環境: すべてのマシンに最新のパッチがインストールされており(Windows Updateから入手可能)、[タイムゾーン設定]で[夏時間の時計を自動的に調整する]がオンになっている東部時間に構成されています。
.NET4を搭載したWindows7マシンと.NET4.5を搭載したWindows7マシンの両方でこの動作を確認しました