tl;博士
WeekFields.of(
firstDayOfWeek ,
minimumDaysInFirstWeek
)
WeekFields
java.time类已经支持非标准周。您可能不需要构建自己的类。java.time.Temporal
类中提供了必要TemporalField
对象的实现WeekFields
。
WeekFields.ISO
常量使用标准ISO 8601 定义的一周:
- 第 1 周是日历年的第一个星期四。
- 第 1 周在 1 月有 4 天或更多天
- 一周从周一开始,周日结束。
但是该课程也是为替代周定义而构建的。该常量WeekFields.SUNDAY_START
针对美国风格的周日至周一周进行了配置。
DayOfWeek dow = WeekFields.SUNDAY_START.getFirstDayOfWeek() ;
dow.toString(): 星期日
获取周数和基于周的年数:
LocalDate ld = LocalDate.of( 2018 , Month.JANUARY , 23 ) ;
int w = ld.get( WeekFields.SUNDAY_START.weekOfWeekBasedYear() ) ;
int y = ld.get( WeekFields.SUNDAY_START.weekBasedYear() ) ;
如果您以不同方式定义一周,请WeekFields
根据需要进行配置。
DayOfWeek firstDayOfWeek = DayOfWeek.TUESDAY ;
int minimumDaysInFirstWeek = 4 ;
WeekFields wf = WeekFields.of( firstDayOfWeek , minimumDaysInFirstWeek ) ;
int w = ld.get( wf.weekOfWeekBasedYear() ) ;
int y = ld.get( wf.weekBasedYear() ) ;
如果您想将一年/周表示为一个单元,那么是的,您需要编写自己的类,类似于ThreeTen-Extraorg.threeten.extra.YearWeek
中的类。这样的类将包含上面显示的对象,并提供包装上面看到的代码的方法。的源代码可通过自由许可证获得。WeekFields
YearWeek.java