【发布时间】:2016-03-22 15:52:06
【问题描述】:
如果我在这里混淆了任何与 ISO 日期相关的术语,请提前道歉。
我希望能够在给定年份(例如 2015 年)的每周进行迭代。我意识到您可以计算 2015 年 1 月 1 日到 2015 年 12 月 31 日之间的周数,但这不符合 ISO 标准的一周。相反,它给出了两个日期之间的 7 天周期数。一年中的第一个 ISO 周不一定从 2015 年 1 月 1 日开始。
如果我能得到第一周的第一个日期,我相信我可以简单地通过 ZonedDateTime.plusWeeks(1) 迭代 52 周。您可以通过字段访问器获取任意日期的周数:
ZonedDateTime date = ZonedDateTime.now();
WeekFields weekFields = WeekFields.of(Locale.getDefault());
int weekNumber = date.get(weekFields.weekOfWeekBasedYear());
鉴于此,我认为在Java8 Time API中一定可以获取特定年第一周的第一天的日期,但我还没有找到方法还没完成。
【问题讨论】:
-
另请参阅my examples,了解如何在不同的库中构建 ISO-week-date。即使是带有
java.util.GregorianCalendar的旧 JDK 也显然更简单,因为 JSR-310(java.time-package)在这里缺少一个简单的工厂方法..