ww SimpleDateFormat的奇怪行为

fvd*_*cin 7 java parsing simpledateformat

任何人都可以解释为什么我在尝试解析日期时获得这些值?我尝试了三种不同的输入,如下所示:

1)2013年第三周

Date date = new SimpleDateFormat("ww.yyyy").parse("02.2013");
Calendar cal = Calendar.getInstance();
cal.setTime(date);
System.out.println(cal.get(Calendar.WEEK_OF_YEAR) + "." + cal.get(Calendar.YEAR));
Run Code Online (Sandbox Code Playgroud)

哪些输出:( 02.2013如我所料)

2)2013年第一周

Date date = new SimpleDateFormat("ww.yyyy").parse("00.2013");
Calendar cal = Calendar.getInstance();
cal.setTime(date);
System.out.println(cal.get(Calendar.WEEK_OF_YEAR) + "." + cal.get(Calendar.YEAR));
Run Code Online (Sandbox Code Playgroud)

哪些产出:( 52.2012这对我来说很好,因为2013年的第一周也是2012年的最后一周)

3)2013年第二周

Date date = new SimpleDateFormat("ww.yyyy").parse("01.2013");
Calendar cal = Calendar.getInstance();
cal.setTime(date);
System.out.println(cal.get(Calendar.WEEK_OF_YEAR) + "." + cal.get(Calendar.YEAR));
Run Code Online (Sandbox Code Playgroud)

哪个输出:( 1.2012这对我来说完全没有意义)

有谁知道为什么会这样?我需要以格式(一周中的一周)解析日期.(年).我使用错误的模式吗?

Jon*_*eet 16

你正在使用ww,这是"一周的一周",但那时yyyy是"日历年"而不是"一年".设置周周,然后设置日历年是问题的一个方法,因为它们只是有效的单独编号系统.

你应该YYYY在你的格式字符串中使用来指定周年...虽然不幸的是你看起来不能以理智的方式获得价值.(我希望Calendar.WEEKYEAR不变,但没有这样的事情.)

此外,周年价值从1开始,而不是0 ......并且没有一周是两周 - 年; 它无论是 2013年的第一个星期或者是2012年的最后一个星期......这不是两个.

如果可能的话,我个人会避免使用周年和周数 - 他们可能会非常混乱,特别是当一个日历年的日期是在不同的一周.

  • @fvdalcin:是的,发布另一个问题 - 但要解释一下你的实际情况.您对"一周中的几周"的想法是否与`java.util.Calendar`的内容一致?您可能还想考虑使用Joda Time,它不仅可以提供此信息,而且在各个方面也是更好的日期/时间API. (3认同)
  • 谢谢,现在我意识到为什么有yyyy和YYYY (2认同)