Java时间:获取特定年份的最大周数

pme*_*pme 3 java datetime week-number java-time java-date

我只找到了Joda Time的解决方案.

我的解决方案只有在最后一天不在第一周时才有效:

LocalDate.now() // or any other LocalDate
  .withDayOfMonth(31)
  .withMonth(12)
  .get(weekFields.weekOfWeekBasedYear())
Run Code Online (Sandbox Code Playgroud)

那么Java Time中的正确方法是什么(比如Joda Time)?

Jod*_*hen 7

可以使用java.time.*API 直接获取此信息.

关键的方法是rangeRefinedBy(Temporal)TemporalField.它允许您获取一个ValueRange对象,该对象提供字段的最小值和最大值,由传入的临时对象细化.

要了解一年中有多少ISO周,请执行以下操作:

LocalDate date = LocalDate.of(2015, 6, 1);
long weeksInYear = IsoFields.WEEK_OF_WEEK_BASED_YEAR.rangeRefinedBy(date).getMaximum();
System.out.println(weeksInYear);
Run Code Online (Sandbox Code Playgroud)

请注意,您传入的日期用于确定答案.因此,当在1月初或12月下旬传递日期时,请确保您了解基于ISO周的日历如何工作,以及日历年和基于周的年份之间的差异.