C# 为“大西洋中部标准时间”映射windows时区和IANA

C# 为“大西洋中部标准时间”映射windows时区和IANA,c#,timezone,C#,Timezone,我发现“大西洋中部标准时间”的windows时区与IANA的映射为Etc/GMT+2和Etc/GMT+1 根据真实数据,我发现: 2011年3月27日凌晨3:00:00至2011年9月25日凌晨12:59:59为Etc/GMT+1 2011年9月25日凌晨1:00:00至2012年3月25日凌晨2:59:59为Etc/GMT+2 这是我用来证明映射正确的代码: var currentDateTime = DateTime.Now; int currYear = currentDateTime.Y

我发现“大西洋中部标准时间”的windows时区与IANA的映射为Etc/GMT+2和Etc/GMT+1

根据真实数据,我发现: 2011年3月27日凌晨3:00:00至2011年9月25日凌晨12:59:59为Etc/GMT+1 2011年9月25日凌晨1:00:00至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;                                                                      
            }
    }

}
我似乎无法将我发现的转换开始和结束规则与真实数据联系起来。 它说从凌晨2点开始,但我的真实数据是凌晨3点,凌晨1点结束


有人能解释一下吗?

可能会有帮助:没有,我已经得到了地图。我只是不理解过渡时间开始和结束的C GetAdjustmentRules。您在IANA数据库中使用的库是什么?我找不到一个有这个特定API的。可能会有帮助:不,我已经得到了映射。我只是不理解过渡时间开始和结束的C GetAdjustmentRules。您在IANA数据库中使用的库是什么?我找不到一个有这个特定API的。
System.TimeZoneInfo.FindSystemTimeZoneById("Mid-Atlantic Standard Time").GetAdjustmentRules().Dump();