任何人都可以解释为什么我在尝试解析日期时会获得这些值? 我尝试了三种不同的输入,如下所示:
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));
哪些输出: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));
哪个输出: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));
哪个输出:1.2012
(这对我来说绝对没有感觉)
有谁知道为什么会这样?我需要以格式(一周中的一周)解析日期。(年)。我使用了错误的模式吗?
答案 0 :(得分:16)
您正在使用ww
,这是"周 - 周",然后是yyyy
,这是"日历年"而不是"周年"。设置星期一年然后设置日历年是问题的一个方法,因为它们只是有效地分开编号系统。
您应该在格式字符串中使用YYYY
来指定周年...但不幸的是,您似乎无法获取值办法。 (我期待Calendar.WEEKYEAR
常数,但没有这样的事情。)
此外,周年价值从1开始,而不是0 ......并且没有一周是两周 - 年; 或它是2012年的最后一周...它不是两者兼而有。
如果可能的话,我个人会避免使用一周和几周 - 他们可能会非常混乱,特别是当一个日历年的日期是在不同的一周时。
答案 1 :(得分:2)
使用Calendar.getWeekYear()将年份值与Calendar.WEEK_OF_YEAR
字段同步。
有关GregorianCalendar doc的年周和周年的更多信息。