在调查一个报表的计算问题时,偶然发现报表会报错
根据错误信息看到,是生成SHEETName的时候,出现了重复的名字。SheetName都是以月份的英文简写作为名称的。而且是循环得到的。怎么会重复呢?这个报表在这个处理的时候是采用了一下方式:
DateFormat df = new SimpleDateFormat("MMM", Locale.US);
Calendar cal = Calendar.getInstance();
for(int i=0;i<12;i++){
cal.set(Calendar.MONTH,i);
System.out.println(df.format(cal.getTime()));
}
}
输出结果
【Wed Jan 30 11:04:18 GMT+08:00 2013
Sat Mar 02 11:04:18 GMT+08:00 2013
Sat Mar 02 11:04:18 GMT+08:00 2013
Tue Apr 02 11:04:18 GMT+08:00 2013
Thu May 02 11:04:18 GMT+08:00 2013
Sun Jun 02 11:04:18 GMT+08:00 2013
Tue Jul 02 11:04:18 GMT+08:00 2013
Fri Aug 02 11:04:18 GMT+08:00 2013
Mon Sep 02 11:04:18 GMT+08:00 2013
Wed Oct 02 11:04:18 GMT+08:00 2013
Sat Nov 02 11:04:18 GMT+08:00 2013
Mon Dec 02 11:04:18 GMT+08:00 2013】
其他月份都没问题,二月就“出错了”。这是怎么回事呢?原来Calendar在进行set的时候很贴心的去检查set后的时间是否合法。因为今天是12月30号,设置月份为2月之后,2月是没有30号的。而所谓的2月30号也就是3月2号。
避免这个问题最简单的修改方式就是先把日期调整到1号,每个月都有1号嘛。这样就不会出现类似问题了。