2

「中部大西洋標準時」の Windows タイムゾーンと IANA とのマッピングは、「Etc/GMT+2」および「Etc/GMT+1」であることがわかりました。

実際のデータから、次のことがわかりました。 2012 年 3 月 25 日午前 2:59:59 は Etc/GMT+2 になります。

これは、マッピングが正しいことを証明するために使用するコードです。

var currentDateTime = DateTime.Now;
int currYear = currentDateTime.Year;

using(var database = Common.Patterns.TimeZoneInfo.Database.IANA.OpenInMemroyReadOnlyDatabase())
{
       var winTimeZone = System.TimeZoneInfo.FindSystemTimeZoneById("Mid-Atlantic Standard Time");
       var commonTimeZoneSG = Zone.FindZone(database, "Atlantic/South_Georgia", ZoneNameTypes.IANATZName);
       var commonTimeZoneNoronho = Zone.FindZone(database, "America/Noronha", ZoneNameTypes.IANATZName);
       var commonTimeZoneGMT2 = Zone.FindZone(database, "Etc/GMT+2", ZoneNameTypes.IANATZName);
       var commonTimeZoneGMT1 = Zone.FindZone(database, "Etc/GMT+1", ZoneNameTypes.IANATZName);

for (int nMonth = 1; nMonth <= 12; ++nMonth)
{
    int nbrDays = DateTime.DaysInMonth(currYear, nMonth);

    for (int nDay = 1; nDay <= nbrDays; ++nDay)
    {
        var currDateTime = new DateTime(currYear, nMonth, nDay, 11, 30, 09);
            //September 30 - March 24
            if(winTimeZone.GetUtcOffset(currDateTime) == commonTimeZoneSG.DetermineUTCOffset(currDateTime).Value)
            {
                break;
            }
            else if(winTimeZone.GetUtcOffset(currDateTime) == commonTimeZoneNoronho.DetermineUTCOffset(currDateTime).Value)
            {
                break;
            }
            else if(winTimeZone.GetUtcOffset(currDateTime) == commonTimeZoneGMT2.DetermineUTCOffset(currDateTime).Value)
            {
                break;
            }
            //March 25 - September 29
            if(winTimeZone.GetUtcOffset(currDateTime) == commonTimeZoneGMT1.DetermineUTCOffset(currDateTime).Value)
            {
                break;
            } 
            else
            {
                Console.WriteLine(string.Format("not mappable for {0}",currDateTime));
                break;                                                                      
            }
    }

}

}

これは私が見つけた遷移規則です:

System.TimeZoneInfo.FindSystemTimeZoneById("Mid-Atlantic Standard Time").GetAdjustmentRules().Dump();

私が見つけたトランジションの開始と終了のルールを実際のデータと関連付けることはできないようです。午前 2 時に始まると表示されていますが、実際のデータは午前 3 時で、午前 1 時に終了します。

誰でも説明できますか?

4

0 に答える 0