首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么JodaTime库和JDK OffsetDateTime报告太平洋/诺福克时区偏移是不同的?哪一个是对的?

为什么JodaTime库和JDK OffsetDateTime报告太平洋/诺福克时区偏移是不同的?哪一个是对的?
EN

Stack Overflow用户
提问于 2022-09-09 05:25:27
回答 1查看 83关注 0票数 1
代码语言:javascript
复制
public static void main(String[] args) {
    System.out.println("Norfolk Island times as per Joda Time");
    IntStream.range(1, 13)
            .forEach(month -> System.out.println(DateTime.now((DateTimeZone.forID("Pacific/Norfolk")))
                    .withYear(2023)
                    .withMonthOfYear(month)
                    .withDayOfMonth(10)
                    .withHourOfDay(2)
                    .withMinuteOfHour(10)
                    .withSecondOfMinute(2)
                    .withMillisOfSecond(0)));
    System.out.println("-------------------------------------");
    System.out.println("Norfolk Island times as per JDK OffsetDateTime");
    IntStream.range(1, 13)
            .forEach(month -> System.out.println(OffsetDateTime.now(ZoneId.of("Pacific/Norfolk"))
                    .withYear(2023)
                    .withMonth(month)
                    .withDayOfMonth(10)
                    .withHour(2)
                    .withMinute(10)
                    .withSecond(2)
                    .withNano(0)));
    System.out.println("-------------------------------------");
}

输出:

代码语言:javascript
复制
Norfolk Island times as per Joda Time
2023-01-10T02:10:02.000+12:00
2023-02-10T02:10:02.000+12:00
2023-03-10T02:10:02.000+12:00
2023-04-10T02:10:02.000+11:00
2023-05-10T02:10:02.000+11:00
2023-06-10T02:10:02.000+11:00
2023-07-10T02:10:02.000+11:00
2023-08-10T02:10:02.000+11:00
2023-09-10T02:10:02.000+11:00
2023-10-10T02:10:02.000+12:00
2023-11-10T02:10:02.000+12:00
2023-12-10T02:10:02.000+12:00
-------------------------------------
Norfolk Island times as per JDK OffsetDateTime
2023-01-10T02:10:02+11:00
2023-02-10T02:10:02+11:00
2023-03-10T02:10:02+11:00
2023-04-10T02:10:02+11:00
2023-05-10T02:10:02+11:00
2023-06-10T02:10:02+11:00
2023-07-10T02:10:02+11:00
2023-08-10T02:10:02+11:00
2023-09-10T02:10:02+11:00
2023-10-10T02:10:02+11:00
2023-11-10T02:10:02+11:00
2023-12-10T02:10:02+11:00
-------------------------------------

因此,根据JodaTime,他们观察DST,但OffsetDateTime说他们没有。

哪一个是对的?还是我做错了什么?

Java: JDK1.8.0.311

JodaTime: 2.10.10

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-09 06:03:30

根据官方文件java.time.OffsetDateTime。OffsetDateTime只是一个带有时区偏移量的实例表示。它不遵守全时区规则,如夏令储蓄。

诺弗克岛有从October 2ndApril 3rd的夏令储蓄。

你真正需要的是java.time.ZonedDateTime。如果您使用ZonedDateTime对象运行代码,您将得到类似于JodaTime的结果

代码语言:javascript
复制
IntStream.range(1, 13)
    .forEach(month -> System.out.println(ZonedDateTime.now(ZoneId.of("Pacific/Norfolk"))
            .withYear(2023)
            .withMonth(month)
            .withDayOfMonth(10)
            .withHour(2)
            .withMinute(10)
            .withSecond(2)
            .withNano(0)));

产出:

代码语言:javascript
复制
2023-01-10T02:10:02+12:00[Pacific/Norfolk]
2023-02-10T02:10:02+12:00[Pacific/Norfolk]
2023-03-10T02:10:02+12:00[Pacific/Norfolk]
2023-04-10T02:10:02+11:00[Pacific/Norfolk]
2023-05-10T02:10:02+11:00[Pacific/Norfolk]
2023-06-10T02:10:02+11:00[Pacific/Norfolk]
2023-07-10T02:10:02+11:00[Pacific/Norfolk]
2023-08-10T02:10:02+11:00[Pacific/Norfolk]
2023-09-10T02:10:02+11:00[Pacific/Norfolk]
2023-10-10T02:10:02+12:00[Pacific/Norfolk]
2023-11-10T02:10:02+12:00[Pacific/Norfolk]
2023-12-10T02:10:02+12:00[Pacific/Norfolk]
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73657647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档