java Calendor 日期比较

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,Date,object,File,calendar,javadoc)