Преобразование CST в EST с летним временем

Я пытаюсь преобразовать DateTime в CST в EST с поправкой на летнее время. Моя локальная машина находится на EST. Нашел это на msdn, но пользователь < href="https://stackoverflow.com/questions/18134202/how-to-convert-est-to-other-times-zonespst-cst-mst-considering-daylight-saving">fokasu рекомендуется использовать DateTimeOffset для настройки на летнее время, но я не знаю, как включить это в свой код. спасибо за любую помощь. это то, что у меня есть до сих пор, которое работает, но я не думаю, что оно настраивается на летнее время.

        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);
        }

person AlgoAlpha    schedule 02.04.2015    source источник
comment
Если вы находитесь на EST или CST, вам не нужно беспокоиться о переходе на летнее время. См. ericlippert.com/2014/04/14/standard- и дневной свет отличаются. Кроме того, за исключением 1-часового окна во время перехода, разница между центральным и восточным временем составляет один час. EST на один час позже, чем CST, а EDT на один час позже, чем CDT.   -  person phoog    schedule 02.04.2015
comment
спасибо фуг. там говорится, что «восточное стандартное время не определяется как «независимо от того, сколько сейчас времени в Нью-Йорке», оно определяется как «восточное время без поправки на летнее время». так почему я не должен беспокоиться об этом??? это b / c EST и CST всегда будут синхронизироваться, когда дело доходит до перехода на летнее время ??   -  person AlgoAlpha    schedule 02.04.2015
comment
Под беспокойством я имел в виду, что EST исключает EDT. Но, конечно, восточное время может быть EDT или EST, поэтому вам, возможно, придется побеспокоиться об этом. В США время смещается в 2 часа ночи по местному времени, поэтому каждую весну есть час, когда восточный часовой пояс соответствует восточному поясному времени, а центральный часовой пояс — центральному поясному времени, а осенью час, когда EST сосуществует с CDT. В осенний час гражданское время в Нью-Йорке и Чикаго равно; в весенний час их убирают на два часа. Но если ограничиться рабочим временем, то Нью-Йорк и Чикаго всегда отличаются на час.   -  person phoog    schedule 02.04.2015
comment
Немного изучив класс TimeZoneInfo фреймворка, я вижу, что он сбивает с толку наличие одного объекта с именем Eastern Standard Time, свойство SupportsDaylightSavingTime которого истинно. Если вы пропустите восточное летнее время, вы получите исключение. Это несовместимо с надлежащей терминологией гражданского времени, но отражает широко распространенное заблуждение, которое пытается исправить запись в блоге Эрика Липперта.   -  person phoog    schedule 02.04.2015
comment
спасибо за понимание ... для моих целей я имею дело со временем в течение всего дня, а не только с рабочими часами. поэтому я думаю, что я все еще остался с проблемой. Есть ли способ адаптировать мой код для настройки на летнее время?   -  person AlgoAlpha    schedule 02.04.2015
comment
Вы уверены, что не можете исключить время между 2 и 3 часами ночи по восточному времени во второе воскресенье марта и первое воскресенье ноября? Если вы не можете, было бы проще использовать DateTimeOffset и забыть о часовых поясах, если это соответствует вашим потребностям. Если время указано в формате UTC-5, имеет ли для вас значение, является ли оно EST или CDT?   -  person phoog    schedule 02.04.2015
comment
Кроме того, как вы думаете, почему ваш код не обрабатывает летнее время? Я только что сделал быстрый тест, и ConvertTimeToUtc на самом деле вел себя по-разному в зависимости от того, было ли время, которое я проезжал летом или зимой. Пожалуйста, отредактируйте свой вопрос, включив в него рабочий пример, иллюстрирующий вашу проблему, а также результат, который вы ожидаете, и фактический результат.   -  person phoog    schedule 02.04.2015
comment
phoog, спасибо, основываясь на вашем комментарии, если изменения летнего времени происходят только по воскресеньям, тогда я могу игнорировать воскресенья, поскольку я пишу торговую программу, а по воскресеньям сделок нет, так как биржи закрыты. безопасно ли предположить, что переход на летнее время происходит ТОЛЬКО по воскресеньям??   -  person AlgoAlpha    schedule 02.04.2015
comment
Да, по крайней мере в США, это всегда 2 часа ночи по местному времени в воскресенье. Вы покрываете часовые пояса, отличные от восточной и центральной зон США?   -  person phoog    schedule 02.04.2015
comment
не только торговля на биржах США .. тогда все улажено, большое спасибо.   -  person AlgoAlpha    schedule 02.04.2015
comment
как установить ответ на этот вопрос?   -  person AlgoAlpha    schedule 02.04.2015
comment
Кто-то должен ответить на него первым. Я сделаю это через минуту.   -  person phoog    schedule 02.04.2015


Ответы (1)


Из вашего вопроса не ясно, в чем проблема; вы не описали ни результаты вашего кода, ни ожидаемый результат.

За исключением двух периодов в году продолжительностью в час каждый, центральное и восточное время всегда отличаются друг от друга на один час. Исключения составляют переходы на летнее и зимнее время. В 2 часа ночи по восточному стандартному времени, во второе воскресенье марта, часы восточного часового пояса переходят на 3 часа ночи по восточному поясному времени. В течение следующих 60 минут восточное время на два часа опережает центральное время. Затем, в 2:00 по центральному поясному времени, часы центрального часового пояса переходят на 3:00 по центральному поясному времени, и разница возвращается к одному часу.

Точно так же в первое воскресенье ноября, в 2 часа ночи по восточному поясному времени, часы устанавливаются на 1 час ночи по восточному поясному времени. В течение следующих 60 минут Центральная зона остается на летнем времени, поэтому время в обоих местах одинаковое. Через час часы центральной зоны переводятся на час назад, и нормальная разница во времени восстанавливается.

Поскольку ваше время никогда не попадет ни в один из этих периодов, вы можете с уверенностью предположить, что центральное время всегда на один час раньше восточного.

person phoog    schedule 02.04.2015