鉴于JSR-310对象,例如LocalDate,我如何找到下周三(或任何其他星期几)的日期?
LocalDate today = LocalDate.now();
LocalDate nextWed = ???
Run Code Online (Sandbox Code Playgroud) 使用LocalDateTime或将月份添加到指定日期最干净的解决方案是什么LocalDate?
很好的答案是在java.time中,如何计算一个月的结果?并在JSR-310中查找一周中某天的下一次出现,因此我希望可以使用类似的干净解决方案来解决此问题。
假设用户为某个周期性任务选择一个月中的某一天(从1到31)。选择后,将生成时间戳记,并且每个月都会增加。仅存储当前月份的时间戳(没有上个月的记录,每个月都会更新时间戳)和选定的月份。
如果选择的日期是31日,并且我们从1月31日开始添加一个月,则dateTime.plusMonths(1)方法将在2016年2月29日给出。如果dateTime.plusMonths(1)再次使用method,则结果是3月29日,而预期的是3月31日。但是,它的工作日为1日至28日。
可能正在使用每月31号的变通办法,dateTime.with(TemporalAdjusters.lastDayOfMonth())但这并不涵盖从28号到30号的日子,也可能是一个月的最后几天。
lastDayOfMonth()每月第30天的选定示例:1月30日,2月29日(如果前一天的前一天较高,则plusMonth方法行为选择最后一天),3月31日(预期是每月的30号)。此方法不考虑每月的选定日期。
当然,这个问题有很多潜在的解决方案,包括一些检查和计算数月与数天之间的差异,但是我仅在可能的情况下使用java.time功能寻找解决方案。
我正在寻找一种将日期移动到选定月份的下个月的方法。喜欢dateTime.plusMonths(1).withDayOfMonth(selectedDayOfMonth)。对于2月31日这样的日期,这将引发一个异常,以withDayOfMonth覆盖plusMonths对最后一个有效日期的调整。
使用plusMonth方法的迭代示例。在上一个迭代值中,采用-想象递归。
+-----------+------------------+---------------+
| iteration | Day-of-month: 31 | Expected |
+-----------+------------------+---------------+
| 1 | January 31st | January 31st |
| 2 | February 29th | February 29th …Run Code Online (Sandbox Code Playgroud)