Из документации ICU :
Может быть несколько раз зон с одинаковым смещением по Гринвичу, которые различаются по способу работы с летним временем.Например, штат Аризона не соблюдает летнее время.Если вы запросите идентификаторы часовых поясов, соответствующие GMT-7: 00, вы получите перечисление по двум идентификаторам часовых поясов: «Америка / Денвер», что соответствует стандартному горному времени зимой и горному летнему времени влето и "Америка / Феникс", что соответствует горному стандартному времени круглый год, даже летом.
Другими словами, вы не можете рассчитать переход на летнее времявремя правильно, если все, что у вас есть для ввода, это смещение.Множество разных зон могут использовать это смещение, некоторые могут использовать его в стандартное время, некоторые могут использовать его в дневное время, а некоторые могут использовать его в течение всего года.
Также понимают, что разные части мира используют DST по-разному,Некоторые начинают раньше или позже, чем в США, а некоторые не используют его вообще.Те, кто использует его в Южном полушарии, обычно в зимнее время, в то время как в северном полушарии летнее, и наоборот.Один часовой пояс переключается только на 30 минут вместо обычных 60. В мире нет единой реализации DST.
В вашем коде вы создаете перечисление зон, которые используют заданное смещение в течение стандартного времени (иливесь год), но вы изучаете только первый пункт перечисления.Нет никаких гарантий, что первый элемент является правильным для использования.
Лучшее, что вы могли бы сделать, это получить текущее время для смещения, которое у вас есть, и вам действительно не нужен ICU для выполнениячто.