/*
 * tiedostonnimi.java
 * 
 * Tide project - Timeline and Schedule. 
 * Reusable GUI components 
 * 
 * To Do:
 * - feature3
 * - feature4
 * Done:
 * - feature1,2 nimmari 15.11.1999
 * - feature5   nimmari  1.12.1999
 */


package fi.helsinki.cs.gist.schedule;

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Date;

/**
 * GDateUtils
 * 
 */
public class GDateUtils {

  ////////////////////
  // Class variables
  ////////////////////

  protected static Calendar defaultCalendar = new GregorianCalendar();

////////////////
// Class methods
////////////////

  /**
    * Compares two days for ordering. compareDays considers just years,
    * months, and days, so it differs from compareTo method of java.util.Date.
    * @return <0, if first day is before second<BR>
    *          0, if days are equal<BR>
    *          >0, if second day is before first.<BR>
    */
  public static int compareDays(Date date1, Date date2, Calendar cal ) {
    Date tmp = cal.getTime();

    cal.setTime(date1);
    int d1 = cal.get(Calendar.YEAR)*10000 + 
      cal.get(Calendar.MONTH)*100 + 
      cal.get(Calendar.DAY_OF_MONTH);

    cal.setTime(date2);
    int d2 = cal.get(Calendar.YEAR)*10000 + 
      cal.get(Calendar.MONTH)*100 + 
      cal.get(Calendar.DAY_OF_MONTH);

    cal.setTime(tmp);

    return d1-d2;
  }

  /**
    * Equal method to compareDays(Date, Date, Calendar), but this
    * uses GregorianCalendar as default. If possible, Calendar should
    * be provided.
    * @return <0, if first day is before second<BR>
    *          0, if days are equal<BR>
    *         >0, if second day is before first.<BR>
    */
  public static int compareDays(Date date1, Date date2) {
    return compareDays(date1,date2,defaultCalendar);
  }


  /**
    * Compares two days for ordering. compareDays considers just hours and
    * minutes, so it differs from compareTo method of java.util.Date.
    * @return <0, if first day is before second<BR>
    *          0, if days are equal<BR>
    *          >0, if second day is before first.<BR>
    */
  public static int compareTimes(Date date1, Date date2, Calendar cal ) {
    Date tmp = cal.getTime();

    cal.setTime(date1);
 
    int d1 = cal.get(Calendar.HOUR_OF_DAY)*100 + 
      cal.get(Calendar.MINUTE);

    cal.setTime(date2);

    int d2 = cal.get(Calendar.HOUR_OF_DAY)*100 + 
      cal.get(Calendar.MINUTE);

    cal.setTime(tmp);

    return d1-d2;
  }

  /**
    * Equal method to compareTimes(Date, Date, Calendar), but this
    * uses GregorianCalendar as default. If possible, Calendar should
    * be provided.
    * @return <0, if first day is before second<BR>
    *          0, if days are equal<BR>
    *         >0, if second day is before first.<BR>
    */
  public static int compareTimes(Date date1, Date date2) {
    return compareTimes(date1,date2,defaultCalendar);
  }
}
