根据JSR-310的本地化年周的良好设计



我需要一个对象来表示一周七天的本地化概念。该对象与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的源代码可通过自由许可证获得。

相关内容

  • 没有找到相关文章

最新更新