任何人都可以告诉我为什么以下代码返回10.5小时,而IST和EST之间的实际差异是9.5小时。
使用getRawOffset():
System.out.println(TimeZone.getDefault().getRawOffset() - TimeZone.getTimeZone("EST").getRawOffset());
使用getOffset():
TimeZone current = TimeZone.getDefault();
TimeZone db = TimeZone.getTimeZone("EST");
long now = System.currentTimeMillis();
System.out.println(db.getOffset(now) - current.getOffset(now));
我的JVM处于IST时区
答案 0 :(得分:2)
由于...... reasons,“EST”没有观察到夏令时的变化(类似地,HST和MST没有,而PST(和其他)则没有)。
改为使用"America/New_York"
。
请注意Javadoc
中的陈述三个字母的时区ID
为了与JDK 1.1.x兼容,还支持其他一些三字母时区ID(例如“PST”,“CTT”,“AST”)。但是,它们的使用已被弃用,因为相同的缩写通常用于多个时区(例如,“CST”可能是美国“中央标准时间”和“中国标准时间”),然后Java平台只能识别其中一个它们。
“IST”可以指“爱尔兰标准时间”,“以色列标准时间”和“印度标准时间”。切勿使用3个字母的缩写来表示时区。
答案 1 :(得分:1)
IST是UTC + 5:30,EST是UTC-5:00
所以我们之间有10:30。也许你想要EDT而不是EST
顺便说一句,在Java 8中,代码将是:
final LocalDateTime ist = LocalDateTime.now(ZoneId.of("IST", ZoneId.SHORT_IDS));
final LocalDateTime est = LocalDateTime.now(ZoneId.of("EST", ZoneId.SHORT_IDS));
System.out.println(Duration.between(ist, est)); // Prints PT-10H-30M0.001S