【问题标题】:Find next occurrence of a day-of-week in JSR-310在 JSR-310 中查找下一个星期几的出现
【发布时间】:2014-02-10 03:25:34
【问题描述】:

给定一个 JSR-310 对象,例如 LocalDate,我如何找到下周三(或任何其他星期几?

LocalDate today = LocalDate.now();
LocalDate nextWed = ???

【问题讨论】:

    标签: java datetime java-8 java-time


    【解决方案1】:

    答案取决于您对“下周三”的定义;-)

    JSR-310 使用 TemporalAdjusters 类提供了两个选项。

    第一个选项是next():

    LocalDate input = LocalDate.now();
    LocalDate nextWed = input.with(TemporalAdjusters.next(DayOfWeek.WEDNESDAY));
    

    第二个选项是nextOrSame():

    LocalDate input = LocalDate.now();
    LocalDate nextWed = input.with(TemporalAdjusters.nextOrSame(DayOfWeek.WEDNESDAY));
    

    两者根据输入日期是星期几而有所不同。

    如果输入日期是 2014-01-22(星期三),那么:

    • next() 将在 2014-01-29 一周后返回
    • nextOrSame() 将返回 2014-01-22,与输入相同

    如果输入日期是 2014-01-20(星期一),那么:

    • next() 将返回 2014-01-22
    • nextOrSame() 将返回 2014-01-22

    即。 next() 总是返回较晚的日期,而nextOrSame() 将返回匹配的输入日期。

    请注意,使用静态导入这两个选项看起来都更好:

    LocalDate nextWed1 = input.with(next(WEDNESDAY));
    LocalDate nextWed2 = input.with(nextOrSame(WEDNESDAY));
    

    TemporalAdjusters 还包括匹配 previous()previousOrSame() 方法。

    【讨论】:

      猜你喜欢
      • 2012-02-19
      • 2011-11-27
      • 2013-03-23
      • 1970-01-01
      • 2019-02-23
      • 2015-06-07
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      相关资源
      最近更新 更多