Java поддерживает три константы часового пояса для восточного стандартного времени, а именно «EST», «America/New_York» и «EST5EDT». Очень важно понимать разницу между ними, чтобы правильно использовать эти константы для преобразования даты или времени в значения восточного стандартного времени.
1. Разница между EST, EST5EDT и «Америка/Нью_Йорк»
В восточной части США смещения часовых поясов различаются летом и зимой.
- Зимой время — восточноевропейское(EST). EST всегда соответствует UTC-5 часов без учета летнего времени(DST).
- Летом время — восточное поясное время(EDT). EDT соответствует UTC-4 часам с учетом летнего времени.
- Чтобы правильно отображать время в течение всего года, мы должны называть его ET(восточное время), которое включает в себя как EST, так и EDT.
- С точки зрения часового пояса EST5EDT означает либо EST, либо EDT. Это указывает, что зона использует стандартное время UT-5h, называемое «EST», летнее время UT-4h, называемое «EDT», и переключается между ними ежегодно.
- Часовой пояс America/New_York совпадает с EST5EDT для всех дат после «Закона о едином времени 1966 года».
- Так что если мы не используем даты до 1966 года в нашем приложении, то мы должны использовать часовой пояс America/New_York. Это предпочтительный способ.
Всегда предпочитайте использовать 'America/New_York' для восточного времени. И используйте 'ET' в отформатированной временной метке. Это представляет как EST, так и EDT.
2. Преобразование даты и времени в часовой пояс ET
Давайте посмотрим, как преобразовать заданную дату и время в момент времени в часовом поясе ET.
2.1. Зональная дата и время
Программа Java для преобразования ZonedDateTime в часовой пояс ET.
DateTimeFormatter globalFormat = DateTimeFormatter.ofPattern("MM/dd/yyyy 'at' hh:mma z");DateTimeFormatter etFormat = DateTimeFormatter.ofPattern("MM/dd/yyyy 'at' hh:mma 'ET'");ZonedDateTime currentISTime = ZonedDateTime.now(); // "Asia/Kolkata"ZonedDateTime currentETime = currentISTime.withZoneSameInstant(ZoneId.of("America/New_York")); //ET TimeSystem.out.println(globalFormat.format(currentETime));System.out.println(etFormat.format(currentETime));
Посмотрите результат:
02/16/2022 at 08:27am GMT-05:0002/16/2022 at 08:27am ET
2.2. java.util.Дата и календарь
Программа Java для печати даты в часовом поясе ET.
SimpleDateFormat etDf = new SimpleDateFormat("MM/dd/yyyy 'at' hh:mma 'ET'");TimeZone etTimeZone = TimeZone.getTimeZone("America/New_York");etDf.setTimeZone( etTimeZone );Date currentDate = new Date();Calendar currentTime = Calendar.getInstance();//In ET TimeSystem.out.println(etDf.format(currentDate.getTime()));System.out.println(etDf.format(currentTime.getTimeInMillis()));
Посмотрите результат:
02/16/2022 at 08:27am ET02/16/2022 at 08:27am ET
Напишите мне в комментариях свои вопросы относительно преобразования даты в EST в Java.