問題

ISO-8601標準規定:

“一年的第一個星期是第一個星期四 年份(因此,總包括1月4日)。”

也就是說,這一年的第一個星期並不包含1月1日,而是第一個星期包含在新年的四天之內。

對於那個孟邦,2016年1月11日在第2周.這是2016年的一個星期數字列表.

Ubuntu在其時間小部件中反映了這一點:

enter image description here

並且cal命令也:

enter image description here

Oracle用TO_CHAR的“iw”引數支援它:

 > select to_char(to_date('11/01/2016','dd/mm/yyyy'),'iw') weekno from dual;
> WEEKNO
    02
 

但Java說Mon,2016年1月11日是第三週

 Calendar c = Calendar.getInstance();
System.out.println(c.getTime());
System.out.println(c.get(Calendar.WEEK_OF_YEAR));

Output:
Mon Jan 11 09:02:35 VET 2016
3
 

Java認為今年的第一週是包含1月1日的第一週.

- 有沒有辦法使用ISO-8601-copliant周編號?

  最佳答案

正如我在評論中指出的,預設行為是特定於語言環境的.有些地方將給出3,有些會給出2.

幸運的是,您可以指定年度第一週必須出現的天數,對於給定的Calendar.如上所述,對於ISO 8601,這個數字是4,因此以下程式碼應該工作:

 Calendar c = Calendar.getInstance();
c.setMinimalDaysInFirstWeek(4); // For ISO 8601
System.out.println(c.getTime());
System.out.println(c.get(Calendar.WEEK_OF_YEAR));
 

這應該使輸出無論位置如何都正確.

測試輸出:

 Mon Jan 11 14:54:22 CET 2016
2
 

  相同標籤的其他問題

javadateiso