2014-09-24 69 views

回答

20

一個小警告。我沒有測試過這還,但望着WeekFieldsLocalDate.get API文檔,你應該這樣做:

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

小心Locale.getDefault()。在一些地方(例如加拿大),它可以返回一個星期一開始的一個星期。星期一開始使用「Locale.ISO」數週。 – 2016-01-24 14:12:18

+1

沒有Locale.ISO,但有'WeekFields.ISO' – 2017-04-10 15:16:29

24

馬克Rotteveel的答案是差不多吧,再一個例子的困惑潛在的有是類WeekFields(類似的探測方法名稱,但偏離直覺民用)。正確的代碼需要另一個領域:

LocalDate date = LocalDate.now(); 
TemporalField woy = WeekFields.of(Locale.getDefault()).weekOfWeekBasedYear(); 
int weekNumber = date.get(woy); 

另見本SO-post類似的討論,特別是討論和評論有關@kleopatra的答案。

+0

我已經根據你的更新了我的答案。我沒有在這裏訪問Java 8,所以我不得不猜測(它看起來像我沒有閱讀['WeekFields'](http://docs.oracle.com/javase/8/docs/api /java/time/temporal/WeekFields.html)類文檔密切關聯,因爲它解釋了這種差異。 – 2014-09-24 10:40:37

+0

@MarkRotteveel好的,你現在有了我的讚賞;-)對我來說,名字「weekOfWeekBasedYear」過於技術化,仍然令人討厭。即使是ISO-8601紙也不包含這個術語(它只是使用諸如「日曆周」或「週日期」之類的術語)。 – 2014-09-24 10:51:34

+1

注意Locale.getDefault()。在一些地方(例如加拿大),它可以返回一個星期一開始的一個星期。星期一開始使用「Locale.ISO」數週。 – 2016-01-24 14:12:35