Определите, использовать ли EST или EDT для нью-йоркского времени - PullRequest
0 голосов
/ 20 апреля 2020

Я анализирую список дат местного времени в Нью-Йорке и создаю DateTimeOffsets с правильным часовым поясом. Однако я не уверен, как определить, должна ли зона быть EST или EDT. Например, ниже приводится нью-йоркское время, а затем конвертируется в гонконгское время. Тем не менее, это будет неправильно в периоды EDT.

var timeStamp = DateTime.Parse(dateStr);

var tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");        
DateTimeOffset nyTime = new DateTimeOffset(timeStamp, tz.BaseUtcOffset);

var hkTimeZone = TimeZoneInfo.FindSystemTimeZoneById("China Standard Time");        

DateTimeOffset convertedDToffset = TimeZoneInfo.ConvertTime(nyTime , timeZone);

var hkTime = convertedDToffset.DateTime;

Однако это даст неправильное время, когда преобладает EDT. Как я могу автоматически определить, какой использовать? (Я действительно ищу часовой пояс Нью-Йорка ....)

1 Ответ

0 голосов
/ 20 апреля 2020

Если вы вводите дату в качестве местного времени в Нью-Йорке, вы можете попробовать это.

Протестировано с угловым регистром 8 марта 2020 года в 2:00 AM

    static void Main(string[] args)
    {
        var est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
        var hkTimeZone = TimeZoneInfo.FindSystemTimeZoneById("China Standard Time");

        var timeStamp = DateTime.Parse("8/3/2020 0:59:59");
        PrintUtc(timeStamp, est);
        Console.WriteLine("To HK {0}", ToHkDateTime(timeStamp, est, hkTimeZone));

        timeStamp = DateTime.Parse("8/3/2020 1:59:59");
        PrintUtc(timeStamp, est);
        Console.WriteLine("To HK {0}", ToHkDateTime(timeStamp, est, hkTimeZone));

        timeStamp = DateTime.Parse("8/3/2020 3:00:00");
        PrintUtc(timeStamp, est);

        Console.WriteLine("To HK {0}", ToHkDateTime(timeStamp, est, hkTimeZone));
    }

    private static void PrintUtc(DateTime timeStamp, TimeZoneInfo est)
    {
        Console.WriteLine("");

        if (est.IsDaylightSavingTime(timeStamp))
        {
            Console.WriteLine("IsDaylightSavingTime");
        }
        Console.WriteLine("GetUtcOffset: {0}", est.GetUtcOffset(timeStamp));
        Console.WriteLine(timeStamp.ToString("F"));


        Console.WriteLine("ToUtc {0}",
            TimeZoneInfo.ConvertTimeToUtc(timeStamp, est));
    }

    private static DateTime ToHkDateTime(DateTime timeStamp, TimeZoneInfo est, TimeZoneInfo hkTimeZone)
    {
        return TimeZoneInfo.ConvertTimeFromUtc(
            TimeZoneInfo.ConvertTimeToUtc(timeStamp, est),
            hkTimeZone);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...