java Calendor 日期比较

本文详细介绍了Java中Calendar类的before()和after()函数用于日期比较的方法,包括比较对象限制、文件日期比较注意事项及毫秒数问题解决。同时展示了如何通过SimpleDateFormat将字符串转换为日期,并使用Calendar进行日期比较。

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

Calendor 日期比较使用before(Object when) 和after(Object when) 函数。

1、只能是两个Calendor实例相比较

这里虽然参数when是Object类型,似乎只要是日期类型的对象都可以,但其实不然,JAVADOC有说明:

if and only if when is a Calendar instance. Otherwise, the method returns false.

就是说比较的对象,只能是Calendar 和Calendar比较,如果不是Calendar实例则直接返回false.

String sFile = "c:\\test.jpg"; File file = new File(sFile); if(file.exists()){ long lm = file.lastModified(); String modifiedSince = "Thu, 15 Sep 2011 07:21:08 GMT" SimpleDateFormat sdf2 = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss 'GMT'", Locale.US); sdf2.setTimeZone(TimeZone.getTimeZone("GMT")); Date dModifiedSince = sdf2.parse(modifiedSince); Calendar clnd1 = Calendar.getInstance(); clnd1.setTime(dModifiedSince); log.debug("dModifiedSince,clnd1.getTime()=" + dModifiedSince+ "," + clnd1.getTime()); Calendar clnd2 = Calendar.getInstance(); clnd2.setTimeInMillis(lm); log.debug("fileModified=" + clnd2.getTime()); log.debug("clnd2.after(dModifiedSince)=" + (clnd2.after(dModifiedSince))); //false log.debug("clnd2.before(dModifiedSince)=" + (clnd2.before(dModifiedSince))); //false //如果是Calendar和Date比较,则均返回false log.debug("clnd2.after(clnd1)=" + (clnd2.after(clnd1))); //true log.debug("clnd2.before(clnd1)=" + (clnd2.before(clnd1))); //false }

2、文件日期比较要注意毫秒数问题

文件日期是带毫秒数的,如dModifiedSince,clnd1.getTime()打印的结果是一样:

dModifiedSince,clnd1.getTime()=Thu Sep 15 15:54:48 CST 2011,Thu Sep 15 15:54:48 CST 2011

但毫秒数并不相等

log.debug(clnd1.getTimeInMillis() + "," + clnd2.getTimeInMillis());

结果:

1316073288000,1316073288900

如果不想精确到毫秒,则可以去掉毫秒,通过下面的语句实现:

Calendar clnd2 = Calendar.getInstance(); long lm2 = lm /1000 * 1000; clnd2.setTimeInMillis(lm2);

3、比较函数

比较函数有before(), after(), equal(), 分别用于之前,之后,相等的比较。JDK1.6中新增加了compareTo(Calendar) 比较函数,对应于<0 =0 >0

未来时间为后,过去时间为前,如果不把握这个规则,这里很容易纠结。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值