大家好:  目前我正在总结使用java求两个时间点日期差的问题,我自己写了一个类以实现该功能,却遇到了一个
十分奇怪的问题:
我的源码如下:
package com.bf.admin;
import java.util.*;
import java.text.*;
public class EclipseDate {
 private  GregorianCalendar gc1,gc2;
 public static final int ACCMODE = 0;    //ACC-->Accurate 精确模式,即严格时间单位  --->
 public static final int UNACCMODE = 1;  //非精确模式,即时间单位变化 public EclipseDate(Calendar g1,Calendar g2){
     SetTime(g1,g2);
 }
 public void SetTime(Calendar g1,Calendar g2){
    if(g2.after(g1)){  
    gc1 = (GregorianCalendar)g1.clone();
    gc2 = (GregorianCalendar)g2.clone();
 }
    else{
     gc1 = (GregorianCalendar)g2.clone();
     gc2 = (GregorianCalendar)g1.clone();
  }
 }
  public void SetTime(Calendar g1){
    this.gc1 = (GregorianCalendar)g1.clone();
    SetTime(g1,this.gc2);
 }   public int GetYears(){
    int iYearCount =0;
    DateFormat a= DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL);
    GregorianCalendar g2 = (GregorianCalendar)gc2.clone();
    System.out.println(a.format(g2.getTime()));
    g2.clear(Calendar.MILLISECOND);
    System.out.println(a.format(g2.getTime()));
    g2.clear(Calendar.SECOND);
    System.out.println(a.format(g2.getTime()));
    g2.clear(Calendar.MINUTE);
    System.out.println(a.format(g2.getTime()));
    g2.clear(Calendar.HOUR);
    System.out.println(a.format(g2.getTime()));
    g2.clear(Calendar.HOUR_OF_DAY);
    System.out.println(a.format(g2.getTime()));
    g2.clear(Calendar.DATE);
    System.out.println(a.format(g2.getTime()));
    g2.clear(Calendar.MONTH);
    System.out.println(a.format(g2.getTime()));    System.out.println(a.format(g1.getTime()));
    g1.clear(Calendar.MILLISECOND);
    g1.clear(Calendar.SECOND);
    g1.clear(Calendar.MINUTE);
    g1.clear(Calendar.HOUR);
    g1.clear(Calendar.HOUR_OF_DAY);
    g1.clear(Calendar.DATE);
    g1.clear(Calendar.MONTH);
    System.out.println(a.format(g1.getTime()));
    while(g1.before(g2)){
    g1.add(Calendar.YEAR,1);
   iYearCount++;
    }
    return iYearCount;
    }
   public static void main(String[] args) throws Exception{
           GregorianCalendar g1 = new GregorianCalendar(2006,3,28,16,38);
           GregorianCalendar g2 = new GregorianCalendar();
           EclipseDate ed1 = new EclipseDate(g1,g2);
           System.out.println("The Eclipse Years is "+ed1.GetYears());   }
  }
运行后为:
2006年4月28日 星期五 下午04时38分16秒 CST2006年4月28日 星期五 下午04时38分16秒 CST2006年4月28日 星期五 下午04时38分00秒 CST2006年4月28日 星期五 下午04时00分00秒 CST2006年4月28日 星期五 下午04时00分00秒 CST2006年4月28日 星期五 上午12时00分00秒 CST2006年4月1日 星期六 上午12时00分00秒 CST2006年1月1日 星期日 上午12时00分00秒 CST2006年10月12日 星期四 下午04时46分33秒 CST2006年1月12日 星期四 上午12时00分00秒 CSTThe Eclipse Years is 0显然如果日期对象是通过GregorianCalendar的0参数构造函数的话,调用相映的clear(Calendar.Date) 
,clear(Calendar.Month)时,有异常发生,我真是百思不得其解,烦请高手赐教