【问题标题】:Why does joda time update the time and offset when java time doesn't?java - 为什么joda time不更新时间和偏移量而java time不更新?
【发布时间】:2026-01-04 05:40:01
【问题描述】:

我似乎无法弄清楚为什么 joda time 会在夏令时后更新时间和偏移小时数,但 java time 不会。

    DateTime dateTime = new DateTime("2016-04-05T10:06:21.636-05:00").withDayOfWeek(5);

    TemporalField dayOfWeek = WeekFields.ISO.dayOfWeek();
    OffsetDateTime offsetDateTime = OffsetDateTime.parse("2016-04-05T10:06:21.636-05:00").with(dayOfWeek, 5);
    ZonedDateTime zonedDateTime = ZonedDateTime.parse("2016-04-05T10:06:21.636-05:00").with(dayOfWeek, 5);

    System.out.println("dateTime:         " + dateTime); // 2016-04-08T11:06:21.636-04:00
    System.out.println("offsetDateTime:   " + offsetDateTime); // 2016-04-08T10:06:21.636-05:00
    System.out.println("zonedDateTime:    " + zonedDateTime); // 2016-04-08T10:06:21.636-05:00

【问题讨论】:

  • 可能是因为java8 jsr310实现接近yoda时间,但不完全一样?两者之间存在细微差别……可能就是其中之一。
  • 我猜:您没有提供时区,只提供了偏移日期时间和分区日期时间实例的偏移量。在这两种情况下,他们都没有关于夏令时的任何线索。可能,您在构造分区日期时间对象时必须提供一个时区,它可能会按您的预期工作。
  • @Seelenvirtuose 谢谢。这就是问题所在。

标签: java jodatime java-time jsr310


【解决方案1】:

时区与偏移量

您没有提供时区,只提供了偏移日期时间和分区日期时间实例的偏移量。在这两种情况下,他们都没有关于夏令时的任何线索,因为这是时区的信息。

所以你必须在构造分区日期时间对象时提供一个时区,然后它才能按你的预期工作。

【讨论】:

  • 换句话说,与 UTC 的偏移量仅仅是几个小时-分钟-秒。时区更多。时区是特定地区的人们使用的偏移量的过去、现在和未来变化的历史。
最近更新 更多