首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Calendar.getActualMaximum(Calendar.WEEK_OF_YEAR)怪诞

Calendar.getActualMaximum(Calendar.WEEK_OF_YEAR)怪诞
EN

Stack Overflow用户
提问于 2010-01-12 08:45:56
回答 2查看 12.5K关注 0票数 4

要么我不明白getActualMaximum(int)或字段WEEK_OF_YEAR的方法,要么涉及到一个Sun bug (或全部三个)--有人向我解释了为什么(至少在德语语言环境中是)。以下代码:

代码语言:javascript
复制
    Locale.setDefault( Locale.GERMAN );
    Calendar c = Calendar.getInstance();
    c.set( Calendar.YEAR, 2010 );
    c.set( Calendar.MONTH, 0 );
    c.set( Calendar.DAY_OF_MONTH, 1 );
    System.out.println("max:    "+c.getActualMaximum( Calendar.WEEK_OF_YEAR ));
    System.out.println("actual: "+c.get( Calendar.WEEK_OF_YEAR ));

产生以下输出:

代码语言:javascript
复制
    max:    52
    actual: 53

以下是getActualMaximum(int)的Javadoc

返回指定日历字段可能具有的最大值,给定此日历的时间值。例如,月份字段的实际最大值在某些年份为12,在希伯来日历系统中为13。

编辑

情节更复杂了。In a English locale (-Duser.language=en -Duser.country=us)输出是:

代码语言:javascript
复制
    max:    52
    actual: 1

似乎指的是德国地区的太阳虫?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-12 09:47:02

这一信息是正确的:

代码语言:javascript
复制
max:    52
actual: 53

2010年最多有52周。实际周数是53周,因为2009年最多有53周,而大多数周是周日或周一开始的。在大多数情况下,第一周是一年中的第一周,一月有4天。由于1月1日的一周在2010年只有2到3天,所以这一周被认为是2009年的一部分。

最有可能的是,英国地区对于确定第一周有不同的规则,就像第一周是1月1日的第一周一样。

维基百科正确地解释了它:维基百科周刊文章

票数 5
EN

Stack Overflow用户

发布于 2010-01-12 09:49:35

问题是,2010年1月1日是2009年的第53周(在德国),但2010年只有52周(12月31日是第52周)。遗憾的是,Java对象没有与周号相关的年份字段。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2047673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档