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("-------------------------------------");
}输出:
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
发布于 2022-09-09 06:03:30
根据官方文件java.time.OffsetDateTime。OffsetDateTime只是一个带有时区偏移量的实例表示。它不遵守全时区规则,如夏令储蓄。
诺弗克岛有从October 2nd到April 3rd的夏令储蓄。
你真正需要的是java.time.ZonedDateTime。如果您使用ZonedDateTime对象运行代码,您将得到类似于JodaTime的结果
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)));产出:
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]https://stackoverflow.com/questions/73657647
复制相似问题