您的位置:首页 > 其它

【关于SimpleDateFormat 的星期计算问题】

2010-12-29 15:56 483 查看
最近有同事在做报表时,发现一个问题,就是有时候,年末的最后一周返回的week in year数值不正确,明明应该是第53周,却变成了第1周,我测试了下,确实有这种现象,研究发现,其实,这里面是有一个规则的:
只要看12月最后一个周的某个日期是否与次年的1月1号是否在同一个week内。如果在同一个week内,那么都属于次年的第一周。
比如拿今年来说: 2010年的12月26~31号,其实都是2011年的第一周。因为1月1号正好是周六。 而“周日 周一,周二。。。周六”才是刚好一周的循环。

代码测试:

SimpleDateFormat wdf = new SimpleDateFormat("yyyy-MM-dd 'week in year:' 第ww周 ");
Calendar cl = Calendar.getInstance();
cl.set(2010, 11, 25);
String format = wdf.format(cl.getTime());
System.out.println(format);//输出 2010-12-25 week in year: 第52周 (这里是正确的)

SimpleDateFormat wdf = new SimpleDateFormat("yyyy-MM-dd 'week in year:' 第ww周 ");
Calendar cl = Calendar.getInstance();
cl.set(2010, 11, 26); //一直到 31号,或者改为cl.set(2011, 0, 1);都是显示同样的结果。
String format = wdf.format(cl.getTime());

System.out.println(format);//输出 2010-12-26 week in year: 第01周 (因为次年1号是周六,跨年了,就都属于次年的第一周)

再看一个年末最后一周不跨年的例子:2011年12月25~31号

SimpleDateFormat wdf = new SimpleDateFormat("yyyy-MM-dd 'week in year:' 第ww周 ");
Calendar cl = Calendar.getInstance();
cl.set(2011, 11, 26); //这里set的日期从25到31都是同样的结果,第53周,是正确的。
String format = wdf.format(cl.getTime());

System.out.println(format);//
2011-12-26 week in year: 第53周 ()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: