Java 美国东部时间和美国/纽约时区之间的差异

Java 美国东部时间和美国/纽约时区之间的差异,java,calendar,timezone,Java,Calendar,Timezone,有人能告诉我,以下两种说法有什么区别吗 TimeZone.getTimeZone("America/New_York") 及 换句话说,为什么EST不同于美国/纽约。同样在我的应用程序中,要获取美国的当前时区,我应该使用America/New_York还是EST。EST实际上是纽约时区的一半。它总是在标准时间-它没有夏令时部分。依我看,它本身并不是一个合适的时区——它是更完整时区的“标准”部分。当写一个时区时,它只是一个固定的偏移量,与特定的地点无关,我更喜欢使用“Etc/GMT+5”或类似的

有人能告诉我,以下两种说法有什么区别吗

TimeZone.getTimeZone("America/New_York")

换句话说,为什么EST不同于美国/纽约。同样在我的应用程序中,要获取美国的当前时区,我应该使用America/New_York还是EST。

EST实际上是纽约时区的一半。它总是在标准时间-它没有夏令时部分。依我看,它本身并不是一个合适的时区——它是更完整时区的“标准”部分。当写一个时区时,它只是一个固定的偏移量,与特定的地点无关,我更喜欢使用“Etc/GMT+5”或类似的明显固定的东西。(我一般不喜欢“东部时间”之类的东西,因为观察“东部时间”的不同地方在其DST转换中可能会有所不同。这有点像调用编码“扩展ASCII”…它告诉您一些信息,但还不够。)

因此,如果你想知道纽约在任何特定时刻的实际当地时间,请使用美国/纽约

一般来说,不要使用缩写词。发件人:

为了与JDK1.1.x兼容,还支持其他一些三个字母的时区ID(如“PST”、“CTT”、“AST”)。但是,不推荐使用它们,因为同一缩写通常用于多个时区(例如,“CST”可以是美国的“中央标准时间”和“中国标准时间”),Java平台只能识别其中一个时区


(就我个人而言,我还建议您远离
日期
日历
,尽可能多地使用。但事实上,这是另一回事。)

东部标准时间是UTC-5小时。美国/纽约的冬季最晚,夏季最晚,所以现在纽约是UTC-4小时。

我认为认为认为它不是一个合适的时区是误导性的,因为有些时区没有DST/非DST分割。像EST这样的名字是用来表示航海时区的,还是仅仅使用偏移量?@JamesAylett:Pass。我真的希望不会,因为它们模棱两可。(IIRC,CST在“中央标准时间”和“澳大利亚中央夏季时间”之间模棱两可,这一点特别没有帮助——尽管其中一个已经多年没有使用过了。)很高兴见到你,顺便说一句:)@JamesAylett:我的意思是,这不是一个合适的时区,不是因为它没有观测到DST,而是因为它显然是观测到DST的东西的一部分,否则“标准”部分将是多余的。当然,“GMT”在1969年左右也变得棘手,因为它偏离了尚未存在的UTC:(是的,我知道原因,在这一点上我完全同意;但世界上有一些地方没有观测到DST,这是值得指出的。当然,当你得到历史数据时,时区变得越来越痛苦,DST非常痛苦,DDST……嗯,加倍如此。我认为唯一能理解混乱的方法是日期/时间算术etic是执行严格的约定。“纽约时间”有时是“EDT”,有时是“EST”,这一区别意味着你必须坚持纽约时区才能明确无误。
TimeZone.getTimeZone("EST")