如何在 Java 中获取特定日期和时区与 GMT 的时差?
确定特定时区是否处于 DST 非常简单:
boolean isIsraelInDST = TimeZone.getTimeZone("Israel").inDaylightTime(new Date());
我如何获得实际的时差?
使用 TimeZone.getRawOffset():返回添加到 UTC 以获取此时区的标准时间的时间量(以毫秒为单位)。因为这个值不受夏令时影响,所以称为原始偏移量。
如果您想要包含 DST 的偏移量,则使用 TimeZone.getOffset(long date)。您应该为方法提供具体日期,例如现在 - System.currentTimeMillis()
我建议将夏季/冬季时间偏移添加到 getRawOffset:
TimeZone tz1 = TimeZone.getTimeZone("GMT");
TimeZone tz2 = TimeZone.getTimeZone("America/New_York");
long timeDifference = tz1.getRawOffset() - tz2.getRawOffset() + tz1.getDSTSavings() - tz2.getDSTSavings();
我看到这是一个旧线程 - 但添加这个是因为我最近有类似的要求 - 这给出了基于当前时间的实际毫秒差异(来自纪元的毫秒)。
TimeZone.getTimeZone("America/New_York").getOffset(Calendar.getInstance().getTimeInMillis())
public String timeZone(Date date) {
TimeZone timeZone = TimeZone.getTimeZone("America/New_York");
long millis = timeZone.getRawOffset() + (timeZone.inDaylightTime(date) ? timeZone.getDSTSavings() : 0);
return String.format("%s%s:%s",
millis < 0 ? "-" : "+",
String.format("%02d", Math.abs(TimeUnit.MILLISECONDS.toHours(millis))),
String.format("%02d", Math.abs(TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis))))
);
}