2

我需要一个代表一周 7 天的本地化概念的对象。该对象与ThreeTen-ExtraYearWeek库中的对象几乎相同,只是第一天和最少天数有所不同。

我最初想LocalizedYearWeek用一些工厂方法来实现一个LocalizedYearWeek.of(int year, int week, WeekDefinition weekDefinition). 该类WeekDefinition只是一个值对象,它定义了一周中的第一天和最少天数,它也可以作为WeekFields.

我不确定它是否是这种时间的最佳模型,但我没有想出更好的设计理念,所以我正在寻找一些关于如何实现它的指导。

4

1 回答 1

2

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中的类。这样的类将包含上面显示的对象,并提供包装上面看到的代码的方法。的源代码可通过自由许可证获得。WeekFieldsYearWeek.java

于 2018-09-30T21:50:20.477 回答