java - 为什么 2010 年 12 月 31 日返回 1 作为一年中的一周?

标签 java calendar jodatime week-number

例如:

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 时间也是如此。

:)

最佳答案

一年中第几周的定义是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 周。

关于java - 为什么 2010 年 12 月 31 日返回 1 作为一年中的一周?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4608470/

相关文章:

java - 在 Android 中设置日历字段

jodatime - Joda Time : Most recent week and month

java - nscala-time 和 Java 8 数据时间之间的 Scala 日期时间

java - 无法执行java类java.lang.NoClassDefFoundError :

java - listFiles(FileFilter) 而不是 listFiles(FileNameFilter)

php - 如何将雅虎/谷歌日历中的事件与 MySql 同步? - 在 PHP 中用于网络应用程序

java - Joda Time : Invalid format

java - JDBC 结果集行为异常

java - 从/assets/filename 公钥加载 X509Certificate 不正确

c# - 防止用户修改文本框中的日期