如何在Java中获得英国夏季偏移量(BST)

Oli*_*hll 8 java timezone

在英国,我想从UTC/GMT获得当前的偏差.目前偏移是1小时,但似乎无法找到这个.

    TimeZone timeZone = TimeZone.getDefault();
    logger.debug("Timezone ID is '" + timeZone.getID() + "'");
    if (timeZone.getID().equals("GMT")) {
        timeZone = TimeZone.getTimeZone("Europe/London");
        logger.debug("New timezone is '" + timeZone.getID() + "'");
    }
    Long eventDateMillis = Long.parseLong(eventDateValue.getKeyValue());
    int timezoneOffset = timeZone.getOffset(eventDateMillis);
    logger.debug("Offset for " + eventDateValue + "(" + eventDateMillis + ") using timezone " + timeZone.getDisplayName() + " is " + timezoneOffset);
Run Code Online (Sandbox Code Playgroud)

返回调试输出

Wed 2012/09/19 16:38:19.503|Debug|DataManagement|Timezone ID is 'GMT'
Wed 2012/09/19 16:38:19.503|Debug|DataManagement|New timezone is 'GMT'
Wed 2012/09/19 16:38:19.557|Debug|DataManagement|Offset for 18 Sep 2012 09:00(1347958800000) using timezone Greenwich Mean Time is 0
Run Code Online (Sandbox Code Playgroud)

换句话说,时区'GMT'返回零偏移量,我无法找到如何将其设置为返回正确偏移量的东西.

如果有人可以为JodaTime提供一个工作代码示例,那就可以了,但我真的很想避免为了应该是一行而安装一个单独的库.

Java版本是7.

Jon*_*eet 11

换句话说,时区'GMT'返回零偏移量,我无法找到如何将其设置为返回正确偏移量的东西.

0 GMT的正确偏移量,永久.

你想要"欧洲/伦敦",这是在GMT和BST之间切换的时区.

编辑:我原本没有注意到你想要去欧洲/伦敦.看起来你的JVM正在使用的时区数据库基本搞砸了.您可以尝试修复,或者只使用自带的tzdb副本的Joda Time.示例代码:

DateTimeZone zone = DateTimeZone.forID("Europe/London");
long offset = zone.getOffset(new Instant());
System.out.println(offset); // 3600000
Run Code Online (Sandbox Code Playgroud)