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
未来时间为后,过去时间为前,如果不把握这个规则,这里很容易纠结。