Java-Calendar小结

本文通过测试代码详细解析了 Java 中 Calendar 类的 set 方法使用方法,包括如何设置年月日及如何获取日期信息,并讨论了毫秒数的影响及解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇文章是为了说清楚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());

执行第一次结果:
[img]http://dl2.iteye.com/upload/attachment/0111/7566/f10d61da-0b85-3b94-a80d-2f028279e249.png[/img]
执行第二次结果:
[img]http://dl2.iteye.com/upload/attachment/0111/7564/3c6499e7-a247-3771-bce7-b75297ab94e6.png[/img]

发现:
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值