.NET 4.5とSystem.DateTimeで奇妙な動作が見られています。 Kind = UtcでDateTimeオブジェクトに適用されたときのToLocalTime()の動作は.NET 4.5と比較して.NET Framework 4.5のServer 2008R2マシンでは異なるようです。もっと奇妙なことに、この問題は.NET 4.5がインストールされた開発者PCには現れません。DateTime.ToLocalTime()の動作がServer 2008R2の.NET 4.5で変更されましたか?
誰でもこの動作の説明がありますか?私はマイクロソフトのサイトでバグ報告を出すことはできません。より複雑なアプローチを使用して動作する時間を変換することはできますが、将来誰も.ToLocalTime()を使用することを確実にすることは困難です。
開発PC - Windows 7の、VS2012、VS2012の間にインストールされている.NET 4.5がインストール:
unixEpoch 621355968000000000 Utc
asLocal1 635121441023588986 Local
asLocal2 635121441023588986 Unspecified
プロダクションサーバー1 - サーバー2008R2、.NET 4.0
unixEpoch 621355968000000000 Utc
asLocal1 635121441023588986 Local
asLocal2 635121441023588986 Unspecified
プロダクションサーバー2 - サーバー2008R2 、.NET 4.5をスタンドアロンパッケージとしてインストール
unixEpoch 621355968000000000 Utc
asLocal1 ***635121405023588986*** Local
asLocal2 635121441023588986 Unspecified
ストールされたプロダクションサーバ1と2は同一です。この問題は、世界中のいくつかの異なるローカルタイムゾーンで実行されたときに現れます。問題を示し
サンプルコード:
using System;
using NUnit.Framework;
namespace DateTimeToLocal
{
[TestFixture]
public class DateTimeFixture
{
private const long unixTimeInNanos = 1376561702358898611;
[Test]
public void Demonstrate()
{
DateTime unixEpoch = new DateTime(1970, 01, 01, 0, 0, 0, DateTimeKind.Utc);
DateTime utc = unixEpoch.AddTicks(unixTimeInNanos/100);
// Method 1 - doesn't work on 2008R2 with .NET 4.5
DateTime asLocal1 = utc.ToLocalTime();
// Method 2 - works across all .NET 4.0 and .NET 4.5
TimeZoneInfo localTz = TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.StandardName);
DateTime asLocal2 = TimeZoneInfo.ConvertTimeFromUtc(utc, localTz);
Console.WriteLine("unixEpoch {0} {1}", unixEpoch.Ticks,unixEpoch.Kind);
Console.WriteLine("asLocal1 {0} {1}", asLocal1.Ticks, asLocal1.Kind);
Console.WriteLine("asLocal2 {0} {1}", asLocal2.Ticks, asLocal2.Kind);
Assert.AreEqual(asLocal1, asLocal2);
}
public static void Main(string[] args)
{
var t = new DateTimeFixture();
t.Demonstrate();
}
}
}
夏時間に噛まれていますか(ローカルでは計算されていますが、未指定ではありません)? –
可能な複製[TimeZoneInfo.Local対TimeZoneInfo.FindSystemTimeZoneById](http://stackoverflow.com/questions/14861302/timezoneinfo-local-vs-timezoneinfo-findsystemtimezonebyid) – BartoszKP
これらのそれぞれのケースで「GetUtcOffset」は何を返しますか? http://sourceforge.net/library/system.timezone.getutcoffset.aspx – EkoostikMartin