【发布时间】:2015-05-13 13:08:59
【问题描述】:
假设我想知道距离圣诞节还有多少天,方法是在任何一年中的任何一天都有效,所以下一个圣诞节可能是今年或明年,我不知道它是否是闰年。
我可能会计算下一个圣诞节日期,然后计算从现在到那时的天数。我可以将圣诞节表示为 MonthDay.of(12, 25),但我找不到这有什么帮助。
我发现这样计算下周一的日期很容易:
ZonedDateTime nextMonday = ZonedDateTime.now()
.with(TemporalAdjusters.next(DayOfWeek.MONDAY))
.truncatedTo(ChronoUnit.DAYS);
但我找不到任何 TemporalAdjuster 可以对 MonthDay 做同样的事情。
有没有我没找到的简单方法?
【问题讨论】:
-
ZonedDateTime不是解决您问题的正确数据类型。请改用LocalDate。 -
@MenoHochschild 只是评论还是会有帮助?
-
这也将有所帮助,因为它是一个强大的简化。对于
LocalDate,@assylias 的建议是 100% 安全且有效。使用ZonedDateTime,您还必须深入考虑与时区相关的内容。您的问题的性质不需要超过日期精度。让事情变得过于复杂只是资源的腰部。 -
@MenoHochschild 你想发布一个简化的答案吗?我无法理解它如何帮助代码变得更简单。
-
但是@assylias 已经发布了使用
LocalDate的解决方案,甚至展示了如何在LocalDate的实例上应用自定义调整器的示例。您当然也可以在LocalDate.now(timezone)上应用他的调节器。我会接受他的回答,然后你就可以摆脱任何时区的东西(除了得到 now()-instance ofLocalDate)。