30

例如:

Calendar c = Calendar.getInstance();
DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
c.setTime( sdf.parse("31/12/2010"));
out.println( c.get( Calendar.WEEK_OF_YEAR ) );  

打印 1

Joda时间也是如此。

:)

4

5 回答 5

61

一年中的一周的定义是Locale依赖的。

在其他帖子中讨论了它在美国的定义。例如在德国 ( DIN 1355-1 / ISO 8601 ):一年中的第一周* 是新年的第一周有 4 天或更多天。

*一周的第一天是星期一,一周的最后一天是星期日

Java 的Calendar注意语言环境。例如:

public static void main(String[] args) throws ParseException {

    DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    Date lastDec2010 = sdf.parse("31/12/2010");

    Calendar calUs = Calendar.getInstance(Locale.US);       
    calUs.setTime(lastDec2010);

    Calendar calDe = Calendar.getInstance(Locale.GERMAN);       
    calDe.setTime(lastDec2010);

    System.out.println( "us: " + calUs.get( Calendar.WEEK_OF_YEAR ) ); 
    System.out.println( "de: " + calDe.get( Calendar.WEEK_OF_YEAR ) );
}

印刷:

us: 1
de: 52

已添加 对于美国(我可以认为墨西哥也是如此),一年中的第 1 周是 1. 一月所属的那一周。-- 所以如果 1. Januar 是星期六,那么之前的星期五(12 月 31 日)属于同一周,在这种情况下,这一天属于 2011 年的第 1 周。

于 2011-01-05T20:09:00.487 回答
11

为 WEEK_OF_YEAR 字段计算的值范围为 1 到 53。一年的第 1 周是从 getFirstDayOfWeek() 开始的最早的 7 天时间段,其中至少包含该年的 getMinimalDaysInFirstWeek() 天数。因此,它取决于 getMinimalDaysInFirstWeek()、getFirstDayOfWeek() 和 1 月 1 日的星期几的值。一年的第 1 周和下一年的第 1 周之间的周按从 2 到 52 或 53 的顺序编号(如需要)。

要确定该周是 2010 年的最后一周还是 2011 年的第一周,Java 使用getMinimalDaysInFirstWeek javadoc。如果该方法返回 7,那么一周中所有天都在同一年的第一周是第一周,如果它返回 1,那么带有下一年任何天的第一周是下一年的第一周。

在这种情况下,2011 年 1 月的第一天是星期六,所以它被认为是 2011 年的第一周,只要您希望有一天的一周已经被视为明年的第一周,如果您不这样做然后做:

Calendar c = Calendar.getInstance();
c.setMinimalDaysInFirstWeek(7);//anything more than 1 will work in this year
DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
c.setTime( sdf.parse("31/12/2010"));
System.out.println( c.get( Calendar.WEEK_OF_YEAR ) ); 

返回:

52
于 2011-01-05T19:57:00.440 回答
4
于 2016-01-18T22:07:10.920 回答
3

IIRC,日期为 1 月 1 日的第一周是第 1 周。
这就是为什么在 2010 年 12 月 31 日返回第 1 周。 在2011
年 12 月 31 日试试,你会得到 52

于 2011-01-05T19:47:44.797 回答
2

这是因为一周的开始取决于当地情况。

在美国,第 1 周从 1 月 1 日之前的星期日开始。在 2010 年,这是 12 月 26 日。这就是为什么 12 月 31 日仍然是第 1 周。

在欧洲,第 1 周从 1 月 1 日之前的星期一开始。在 2010 年,这是 12 月 27 日。这就是为什么在欧洲,12 月 31 日仍然是第 1 周。

于 2011-01-05T19:49:43.180 回答