我需要一个对象来表示一周七天的本地化概念。该对象与ThreeTen-Extra库中的YearWeek
几乎相同,只是第一天和最少天数不同。
我最初想用一些工厂方法(如LocalizedYearWeek.of(int year, int week, WeekDefinition weekDefinition)
(实现一个LocalizedYearWeek
。类WeekDefinition
只是一个定义第一天和一周的最小天数的值对象,它也可以用作WeekFields
工厂。
我不确定它是否是这种时间的最佳模型,但我没有想出更好的设计想法,所以我正在寻找一些关于如何实现它的指导。
tl;博士
WeekFields.of(
firstDayOfWeek ,
minimumDaysInFirstWeek
)
WeekFields
java.time类已经支持非标准周。您可能不需要构建自己的类。WeekFields
类中提供了具有必要TemporalField
对象的java.time.Temporal
实现。
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-Extra中的org.threeten.extra.YearWeek
类。这样的类将包含上面显示的WeekFields
对象,并将提供包装上面看到的代码的方法。YearWeek.java
的源代码可通过自由许可证获得。