将 CST 转换为带夏令时的 EST

Convert CST to EST with daylight savings time

我正在尝试将 CST 中的 DateTime 转换为 EST,同时调整夏令时。我的本地机器在美国东部时间。 找到 this on msdn but user fokasu 建议使用 DateTimeOffset 调整 DST,但我不知道如何将其合并到我的代码中。谢谢你的帮助。 这是我目前所拥有的有效方法,但我不认为它正在针对夏令时进行调整。

        DateTime cstTime, utcTime;
        DateTime estTime;
        string cstZoneId, estZoneId;
        TimeZoneInfo cstZone, estZone;

        estZoneId = "Eastern Standard Time";
        cstZoneId = "Central Standard Time";
        estZone = TimeZoneInfo.FindSystemTimeZoneById(estZoneId);
        cstZone = TimeZoneInfo.FindSystemTimeZoneById(cstZoneId);

        //define d as CST
        cstTime = d;
        try
        {
            //convert CST to UTC
            utcTime = TimeZoneInfo.ConvertTimeToUtc(cstTime, cstZone);
            //convert UTC to EST
            estTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, estZone);
            return estTime;
        }
        catch (Exception e)
        {

            Console.WriteLine(e.Message);
        }

从你的问题中看不出是什么问题;您没有描述您的代码产生的结果,也没有描述您的预期结果。

除了每年有两个时段,每个时段持续一个小时,中部时间和东部时间总是相隔一个小时。例外情况是进入和退出夏令时。在美国东部时间 3 月的第二个星期日凌晨 2 点,东部时区的时钟移至美国东部时间凌晨 3 点。接下来的 60 分钟,东部时间比中部时间早两个小时。然后,在 CST 凌晨 2 点,中央时区的时钟移至凌晨 3 点 CDT,时差 returns 为一小时。

同样,在 11 月的第一个星期日,美国东部时间凌晨 2 点,时钟设置为美国东部时间凌晨 1 点。在接下来的 60 分钟内,中区仍采用夏令时,因此两地的时间相同。一小时后,中区时钟拨回一小时,恢复正常时差。

由于您的时间永远不会落入这两个时间段中的任何一个,因此您可以放心地假设中部时间总是比东部时间早一小时。