public static Date convertStringToDate(String date) {
if(date == null) return null;
String[] d = date.split("-");
Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime());//第一次打印
try {
cal.set(Calendar.YEAR, Integer.valueOf(d[0]));
cal.set(Calendar.MONTH, Integer.valueOf(d[1]) -1);
cal.set(Calendar.DAY_OF_MONTH, Integer.valueOf(d[2]));
System.out.println(cal.getTime());//第二次打印
return cal.getTime();
}catch(Exception e) {
return null;
}
}
我们想用这个方法把我们传进去的字符串转成日期类型
现在调用方法传进一个值:convertStringToDate("2010-10")
第一次打印结果:Fri Dec 17 16:15:03 CST 2010(当前服务器时间2010.12)
第一次打印结果:Wed Nov 17 16:15:03 CST 2010(转换后的时间2010.11)
问题:
第二次打印应该是2010.10啊,为什么是2010.11了
这里面是不是有Calendar的机制。我没弄明白。
后来经别人指点后得知:Integer.valueOf(d[1])的值是10,然后赋值给cal的月,cal的月和数组一样,从0开始的,10就表示11月。如梦初醒!