Java-Calendar小结

这篇文章是为了说清楚Calendar这个类的初始化方法set以及如何获取年月日
以下是测试代码:
//这段代码的目的是测试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

猜你喜欢

转载自4876391520.iteye.com/blog/2243975