Разница между часовыми поясами EST и America/New_York

Может кто-нибудь рассказать, какая разница между следующими двумя утверждениями:

TimeZone.getTimeZone("America/New_York")

и

TimeZone.getTimeZone("EST")

Другими словами, почему EST отличается от Америки /New _York. Также в моем приложении для получения текущего часового пояса в США следует использовать America/New_York или EST.

Ответ 1

EST - это половина часового пояса в Нью-Йорке. Это всегда в стандартное время - у него нет летней части. Это не совсем правильный часовой пояс, ИМО - это "стандартная" часть более полного часового пояса. Когда вы пишете о часовом поясе, который является фиксированным смещением и не связан с конкретным местом, я бы предпочел использовать "Etc/GMT + 5" или что-то подобное явно фиксированное. (Мне вообще не нравится даже "Восточное время" и т.п., Поскольку разные места, которые наблюдают "Восточное время", могут отличаться в своих переходах на летнее время. Это немного напоминает вызов кодировки "расширенный ASCII"... это говорит вам о некоторых информации, но не вполне достаточно.)

Поэтому, если вы хотите узнать точное местное время для Нью-Йорка в любой конкретный момент, используйте America/New_York.

В общем, держитесь подальше от аббревиатур. Из документация:

Для совместимости с JDK 1.1.x также поддерживаются некоторые другие трехбуквенные идентификаторы часовых поясов (такие как "PST", "CTT", "AST" ). Однако их использование устарело, поскольку такое же сокращение используется часто для нескольких часовых поясов (например, "КНТ" может быть "Центральным стандартным временем" США и "Китайским стандартным временем" ), и платформа Java может затем распознать только одну из их.

(Лично я также советую вам держаться подальше от Date и Calendar, предпочитая использовать Joda Time, где это возможно. На самом деле это другое дело.)

Ответ 2

EST - UTC - 5 часов. Америка /New _York - EST зимой и E * D * T летом, поэтому прямо сейчас Нью-Йорк - UTC - 4 часа.