来自不同时区的时间差异

时间:2017-06-30 09:29:32

标签: java time

任何人都可以告诉我为什么以下代码返回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时区

2 个答案:

答案 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

请参阅:https://www.timeanddate.com/worldclock/converter.html?iso=20170630T090000&p1=tz_ist&p2=tz_est&p3=tz_et

顺便说一句,在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