这个
基于周的年份
javadoc
,取决于两件事:一周的第一天是多少,以及第一周的最少天数。
ISO标准将星期一定义为一周的第一天,第一周至少4天:
System.out.println(WeekFields.ISO.getFirstDayOfWeek()); // Monday
System.out.println(WeekFields.ISO.getMinimalDaysInFirstWeek()); // 4
(
WeekFields.ISO.weekBasedYear()
IsoFields.WEEK_BASED_YEAR
具有
minor differences regarding another calendar systems
nd公司
2009年,星期五。检查
javadoc for the
week-based-year
field
:
第
2008年1月4日结束
2009年(这是从周一开始的第一周,2009年至少有4天),因此1月2日
2009年
基于周的年份
等于2009年(ISO定义):
// January 2st 2009
LocalDate dt = LocalDate.of(2009, 1, 2);
System.out.println(dt.get(WeekFields.ISO.weekBasedYear())); // 2009
System.out.println(dt.get(WeekFields.ISO.weekOfWeekBasedYear())); // 1
// WeekFields.ISO and IsoFields are equivalent
System.out.println(dt.get(IsoFields.WEEK_BASED_YEAR)); // 2009
System.out.println(dt.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR)); // 1
WeekFields
实例
en_MT
locale (English (Malta))
WeekFields wf = WeekFields.of(new Locale("en", "MT"));
System.out.println(wf.getFirstDayOfWeek()); // Sunday
System.out.println(wf.getMinimalDaysInFirstWeek()); // 4
System.out.println(dt.get(wf.weekBasedYear())); // 2008
System.out.println(dt.get(wf.weekOfWeekBasedYear())); // 53
从1月4日开始的第一周是2009年至少有4天的周日
至10
第
en_MT
地区,1月2日
nd公司
2009属于
第
周
2008
ar_SA
locale (Arabic (Saudi-Arabia))
,一周从周六开始,第一周的最小天数为1:
WeekFields wf = WeekFields.of(new Locale("ar", "SA"));
System.out.println(wf.getFirstDayOfWeek()); // Saturday
System.out.println(wf.getMinimalDaysInFirstWeek()); // 1
System.out.println(dt.get(wf.weekBasedYear())); // 2009
System.out.println(dt.get(wf.weekOfWeekBasedYear())); // 1
对于此区域设置,第1周从12月27日开始
第
2008年1月2日结束
nd公司
基于周的年份
2009年
ar_SA公司
区域设置也是2009年(与我使用的值相同)
IsoFields
尽管周的定义与ISO完全不同
).
虽然
等场。基于周的年
YYYY
WeekFields公司
实例对应于格式化程序中设置的区域设置(或JVM默认区域设置,如果未设置)。
根据每个区域设置的定义(一周中的第一天和第一周中的最少天数),该
基于周的年份
YYYY年
)可能与ISO字段的值相同(或不同)。
javadoc
一年的第一周和最后几周可能分别包含上一个日历年或下一个日历年的天数。
图案字母
java.time
were based on CLDR
Unicode Common Locale Data Repository
).
This link about Week based patterns
Y表示的年份通常始于
场所
s一周的第一天,结束于一周的最后一天
Y
本地化,以及
Stephen Colebourne's comment
如下:
CLDR的全部目的是本地化,“Y”模式字母是本地化的。虽然我理解人们对总是使用ISO规则操作的模式字母的渴望,但它并不存在,让CLDR添加它是很难做到的。(Java正在密切关注CLDR)
Locale.FRENCH
作为一个
WeekFields.ISO.equals(WeekFields.of(Locale.FRENCH))
退货
true
). 唯一的问题是,区域设置也会影响其他字段(如果您有月份或星期几的名称,例如
MMM
或
EEE
,以及任何其他区域设置敏感数据)。