【问题标题】:Get the next LocalDateTime for a given day of week获取一周中给定日期的下一个 LocalDateTime
【发布时间】:2016-05-23 18:40:20
【问题描述】:

我想在下一个(例如)星期一的日期/时间创建LocalDateTime 的实例。

Java Time API 中是否有任何方法,或者我应该计算当前日期和目标日期之间的天数,然后使用 LocalDateTime.of() 方法?

【问题讨论】:

  • @Fincio 当然不是。
  • LocalDateTime plusWeeks(长周)?
  • @Fincio 仍然没有:)。阅读我的答案。
  • 一天中的时间对您来说也很重要吗?如果是,那么接受的答案可能不是您正在寻找的答案,否则这是一个很好的答案。

标签: java java-8 jodatime java-time


【解决方案1】:

无需手动计算。

您可以使用 LocalDateTime.with(adjuster) 方法使用调整器调整给定日期。一周的第二天有一个内置调节器:TemporalAdjusters.next(dayOfWeek):

返回下一个星期调整器,它将日期调整为调整日期之后指定星期几的第一次出现。

public static void main(String[] args) {
    LocalDateTime dateTime = LocalDateTime.now();
    LocalDateTime nextMonday = dateTime.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
    System.out.println(nextMonday);
}

此代码将根据当前日期返回下一个星期一。

使用静态导入,这使代码更易于阅读:

LocalDateTime nextMonday = dateTime.with(next(MONDAY));

请注意,如果当前日期已经是星期一,则此代码将返回下一个星期一(即下周的星期一)。如果您想在这种情况下保留当前日期,可以使用nextOrSame(dayOfWeek)

【讨论】:

  • 提示:如果您想要一个特定的时区而不是 JVM 当前的默认时区,请将 ZoneId 传递给 now( ZoneId )
  • java.time 类内置于 Java 8 及更高版本以及 Android 26 及更高版本。大多数 java.time 功能在 ThreeTen-Backport 项目中被反向移植到 Java 6 和 Java 7。进一步适用于ThreeTenABP 中的早期 Android (How to use ThreeTenABP…
  • 我该怎么设置时间?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-31
  • 1970-01-01
  • 1970-01-01
  • 2019-05-14
  • 2013-06-18
  • 1970-01-01
相关资源
最近更新 更多