2

我正在尝试获取 NY(美国/东部)和 UTC 之间的当前偏移量。无论我的服务器位于哪个时区以及其他任何时间,我如何才能获得此值。我只想要以毫秒为单位的偏移量。我确信有一种快速的方法可以做到这一点,但我还没有找到。

先感谢您!

4

5 回答 5

5

注意:这未经测试。

使用:

日历类

时区类

//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);
于 2012-10-09T20:54:56.480 回答
2

我们可以得到它:

森林:

    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());
于 2012-10-09T20:57:18.910 回答
0

Java API 时区

使用 getOffset() 函数获取一个时区和 GMT 的偏移量,然后是另一个和 GMT 的偏移量,然后减去它们,你就准备好了。不过要小心,有人确实提到这取决于当前日期!这不是微不足道的,因为每天都有几个小时,两个时区在不同的日期!这可能很重要,例如,如果两个时区在这几个小时内位于不同的 DST 区域(例如 DST 更改时间),这可能会导致显示不正确

于 2012-10-09T20:45:19.717 回答
0

您可以使用 getRawOffset() 函数来获取任何两个时区之间的偏移量...但是您必须了解一件事,偏移量将是 UTC 和给定时区之间的差异。考虑您的服务器在加拿大,那么偏移量必须由加拿大和用户时区之间的时区差异来确定..

    int offset = TimeZone.getTimeZone ('Asia/calcutta').getRawOffset() - TimeZone.getDefault().getRawOffset();

这里的 'TimeZone.getDefault()' 是服务器的时区,即)加拿大......所以需要减去它以获得所需的偏移量。

于 2014-01-07T13:47:23.317 回答
0

我尝试了@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 等),则返回肯定答案。

于 2017-08-12T03:44:21.607 回答