我正在尝试获取 NY(美国/东部)和 UTC 之间的当前偏移量。无论我的服务器位于哪个时区以及其他任何时间,我如何才能获得此值。我只想要以毫秒为单位的偏移量。我确信有一种快速的方法可以做到这一点,但我还没有找到。
先感谢您!
注意:这未经测试。
使用:
//Get NY time zone instance
TimeZone ny_tz = TimeZone.getTimeZone("America/New_York");
//Get NY calendar object with current date/time
Calendar ny_cal = Calendar.getInstance(ny_tz);
//Get offset from UTC, accounting for DST
int ny_offset_ms = ny_cal.get(Calendar.ZONE_OFFSET) + ny_cal.get(Calendar.DST_OFFSET);
我们可以得到它:
森林:
TimeZone est = TimeZone.getTimeZone("America/New_York");
System.out.println("Offset ="+est.getRawOffset());
对于太平洋标准时间:
TimeZone pst = TimeZone.getTimeZone("America/Los_Angeles");
System.out.println("Offset ="+pst.getRawOffset());
使用 getOffset() 函数获取一个时区和 GMT 的偏移量,然后是另一个和 GMT 的偏移量,然后减去它们,你就准备好了。不过要小心,有人确实提到这取决于当前日期!这不是微不足道的,因为每天都有几个小时,两个时区在不同的日期!这可能很重要,例如,如果两个时区在这几个小时内位于不同的 DST 区域(例如 DST 更改时间),这可能会导致显示不正确
您可以使用 getRawOffset() 函数来获取任何两个时区之间的偏移量...但是您必须了解一件事,偏移量将是 UTC 和给定时区之间的差异。考虑您的服务器在加拿大,那么偏移量必须由加拿大和用户时区之间的时区差异来确定..
int offset = TimeZone.getTimeZone ('Asia/calcutta').getRawOffset() - TimeZone.getDefault().getRawOffset();
这里的 'TimeZone.getDefault()' 是服务器的时区,即)加拿大......所以需要减去它以获得所需的偏移量。
我尝试了@Geoff Montee 的答案,但它对我不起作用。这就是最终解决的问题:
public static long getOffsetFromUTCInMilliseconds(TimeZone timezone) {
long offset = timezone.getOffset(DateTimeHelper.nowUTC().toEpochSecond(ZoneOffset.UTC)) + timezone.getDSTSavings();
return offset;
}
方便的是,如果时区晚于 UTC(GMT-1、GMT-2 等),则答案返回否定答案,如果时区早于 UTC(GMT+1、GMT+2 等),则返回肯定答案。