【问题标题】:java find offset between NY and UTCjava查找NY和UTC之间的偏移量
【发布时间】:2012-10-09 20:31:45
【问题描述】:

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

提前谢谢你!

【问题讨论】:

标签: java time timezone


【解决方案1】:

注意:这未经测试。

使用:

Calendar class

TimeZone class

//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);

【讨论】:

    【解决方案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());
    

    【讨论】:

    • OP 要求提供当前偏移量。这将获得原始偏移量。对于在一年中的部分时间使用夏令时的地点,这是不正确的。
    • 您需要添加 est.getRawOffset() + est.getDSTSavings() 来考虑夏令时
    【解决方案3】:

    Java API TimeZone

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

        我尝试了@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、等)。

        【讨论】:

          猜你喜欢
          • 2013-11-27
          • 2017-10-18
          • 2011-03-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-22
          • 1970-01-01
          • 2011-03-22
          相关资源
          最近更新 更多