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
未来时间为后,过去时间为前,如果不把握这个规则,这里很容易纠结。
本文详细介绍了Java中Calendar日期比较方法before()和after()的使用,包括只能比较Calendar实例,注意毫秒数问题及比较函数before(), after(), equal()的用法。同时展示了如何将字符串日期转换为Calendar实例进行日期比较,并强调了文件日期的毫秒数问题及解决方法。
169

被折叠的 条评论
为什么被折叠?



