如何在 Java 中获取英国夏令时偏移 (BST)

2024-04-21

在英国,我想获取当前与 UTC/GMT 的偏移量。目前偏移量是1小时,但似乎没有办法找到这个。

Code

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

返回调试输出

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

换句话说,时区“GMT”返回零偏移量,我找不到如何将其设置为返回正确偏移量的值。

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

Java版本是7.


换句话说,时区“GMT”返回零偏移量,我找不到如何将其设置为返回正确偏移量的值。

0 is永久正确的 GMT 偏移量。

您需要“欧洲/伦敦”,这是在 GMT 和 BST 之间切换的时区。

编辑:我最初没有注意到你是trying前往欧洲/伦敦。看起来您的 JVM 使用的时区数据库基本上是混乱的。您可以尝试修复that,或者简单地使用 Joda Time,它带有自己的 tzdb 副本。示例代码:

DateTimeZone zone = DateTimeZone.forID("Europe/London");
long offset = zone.getOffset(new Instant());
System.out.println(offset); // 3600000
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Java 中获取英国夏令时偏移 (BST) 的相关文章

随机推荐