以下是测试代码:
//这段代码的目的是测试Calendar这个类的两个set方法以及如何获取年月日 //新建一个对象 Calendar cld=Calendar.getInstance(); //设置凌晨时间精确到秒 cld.set(2015,8,15,0,0,0); System.out.println("凌晨开始"+cld.getTimeInMillis()); //设置午夜时间精确到秒 cld.set(2015,8,15,59,59); System.out.println("午夜结束"+cld.getTimeInMillis()); //同样的日期,不设置时分秒 cld.set(2015,8,15); System.out.println("原对象不设时分秒"+cld.getTimeInMillis()); //为了验证cld不设置时分秒与之前的操作是否有关,新建一个对象 Calendar cld1=Calendar.getInstance(); cld1.set(2015,8,15); System.out.println("新对象不设时分秒"+cld1.getTimeInMillis());
执行第一次结果:
执行第二次结果:
发现:
1.调用set方法只设置年月日的时候,与之前set时分秒获得的毫秒数相同;
2.毫秒数不是一个固定的值,是随机的;
3.cld和cld1的毫秒数相差是很大的
结论:
1.对于一个Calendar对象而言,如果不进行任何设置,默认的是当前时间,从生成该对象开始,该对象的时分秒日期等就不会变化;
2.如果调用set方法,仅仅set年月日,该方法会覆盖之前的年月日,但不会覆盖时分秒;
3.当调用set方法,设置年月日时分秒时,才会覆盖原对象的值,但依旧没有覆盖毫秒;
附:
如何获取一个对象的年月日
calendar.get(Calendar.YEAR);
不知道这是谁设计的操蛋的写法,反正直接调用对象是不行滴。。。
PPS:月份默认为0-11,少侠们在转化的时候需要注意
----------2015-10-19补充-----------
这次是想补充关于毫秒数的问题,由于set方法没有设置毫秒数,默认的毫秒数是当前时刻的毫秒数,大多数情况下是不受影响的,不过当需要根据毫秒数查询时,会因为取不到12:00:00:000这个毫秒数,导致查询结果有误差。
方法是把获得的毫秒数除以1000,再乘1000,这样可以把毫秒数置零;而对于结束时刻,可以额外加上999