获取LocalDate的周数(Java 8)

Yve*_*eth 28 java week-number java-8

我正在尝试使用以下格式获取完整LocalDate的周数:

dd.MM.yyy
Run Code Online (Sandbox Code Playgroud)

我还没有在Java 8 Date API中找到一个返回Week Number的函数,我试图创建一个算法,但它没有用.

Mar*_*eel 45

一个小小的警告.我没有测试过这个呢,但看着的API文档WeekFieldsLocalDate.get,你应该这样做:

LocalDate date = ...;
// Or use a specific locale, or configure your own rules
WeekFields weekFields = WeekFields.of(Locale.getDefault()); 
int weekNumber = date.get(weekFields.weekOfWeekBasedYear());
Run Code Online (Sandbox Code Playgroud)

  • 小心Locale.getDefault().在某些地方(例如加拿大),它可以返回从星期日开始的一周.从星期一开始使用"Locale.ISO"几周. (6认同)
  • 没有Locale.ISO,但有`WeekFields.ISO` (5认同)

Men*_*ild 44

Mark Rotteveel的答案几乎是正确的,这是一个例子,类中的混淆潜力WeekFields(类似的声音方法名称,但偏离直观的民用).正确的代码需要另一个字段:

LocalDate date = LocalDate.now();
TemporalField woy = WeekFields.of(Locale.getDefault()).weekOfWeekBasedYear(); 
int weekNumber = date.get(woy);
Run Code Online (Sandbox Code Playgroud)

另见关于这篇SO帖子的类似辩论,特别是有关@kleopatra答案的讨论和评论.

  • 没有Locale.ISO,但有`WeekFields.ISO` (3认同)
  • 注意Locale.getDefault()。在某些地方(例如加拿大),它可以返回从星期日开始的一周。从星期一开始,请在数周内使用“ Locale.ISO”。 (2认同)