Java计算两个日期相差

jopen 9年前

 import java.text.ParseException;  import java.text.SimpleDateFormat;  import java.util.Calendar;  import java.util.Date;  import java.util.GregorianCalendar;    /**   *   * @ClassName: DateMargin   *   * @Description: 计算两个日期相差天数   * @author PineTree   * @date 2014年12月20日 下午2:20:17   * @version   */  public class DateMargin {            public static void main(String[] args) {          try{              /**               * GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second)               * year - 用来在日历中设置 YEAR 日历字段的值。               * month - 用来在日历中设置 MONTH 日历字段的值。Month 值是基于 0 的,例如,0 表示 1 月。               * dayOfMonth - 用来在日历中设置 DAY_OF_MONTH 日历字段的值。               * hourOfDay - 用来在日历中设置 HOUR_OF_DAY 日历字段的值。               * minute - 用来在日历中设置 MINUTE 日历字段的值。               * second - 用来在日历中设置 SECOND 日历字段的值。               */              Date startDate = new GregorianCalendar(2009, 02, 15, 13, 13 ,0).getTime();              Date endDate = new GregorianCalendar().getTime();              System.out.println(startDate +"\t" + endDate);              //System.out.println("使用 getIntervalDays 相差天数 = " + getIntervalDays(startDate, endDate));              //System.out.println("使用 daysOfTwo 相差天数 = " + daysOfTwo(startDate, endDate));              System.out.println("使用daysBetween 相差天数 = " + daysBetween(startDate, endDate));              //System.out.println("使用daysMargin 相差天数 = " + daysMargin(startDate.toLocaleString(), endDate.toLocaleString()));          }catch(Exception e){              e.printStackTrace();          }          }            /**       * 计算两个日期相差的天数       *       * 此版本的方法要比较的严格意义上的天,举个例子,计算今天与昨天比较相差几天,       * 我们或许都认为是1,但我们要输入两个日期类型的参数,这个日期中不仅包含天,       * 还有小时,分等,版本1会根据您输入的小时与分不同,返回不同的结果的,       * 比如你输入的参数今天中午与昨天晚上的两个时间,它就会告诉你相差0天。       *       * @param startDate 起始日期       * @param endDate 结束日期       * @return int 如果是-1说明起始日期或者结束日期为null       */      public static int getIntervalDays(Date startDate, Date endDate){          if(null == startDate || null == endDate){              return -1;          }          System.out.println("endDate = " + endDate.getTime() + "\tstartDate = " + startDate.getTime());          long intervalMilli = endDate.getTime() - startDate.getTime();          System.out.println("intervalMilli = " + intervalMilli);          return (int) (intervalMilli / (24 * 60 * 60 * 1000));      }            /**       * 计算两个日期相差的天数       *       * @param startDate 起始日期       * @param endDate 结束日期       * @return int    如果是-1说明起始日期或者结束日期为null       */      public static int daysOfTwo(Date startDate, Date endDate){          if(null == startDate || null == endDate){              return -1;          }          Calendar calendar = Calendar.getInstance();          calendar.setTime(startDate);          int startDay = calendar.get(Calendar.DAY_OF_YEAR);          System.out.println("startDay = " + startDay);          calendar.setTime(endDate);          int endDay = calendar.get(Calendar.DAY_OF_YEAR);          System.out.println("endDay = " + endDay);          return endDay - startDay;      }            /**       * 计算两个日期相差天数,先把日期转成yyyy-MM-dd格式,再计算。       *       * @param startDate 起始日期       * @param endDate 结束日期       * @return int    如果是-1说明起始日期或者结束日期为null       * @throws ParseException       */      public static int daysBetween(Date startDate, Date endDate) throws ParseException{          System.out.println(startDate.toLocaleString() + "\t" + endDate.toLocaleString());          if(null == startDate || null == endDate){              return -1;          }          SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");          startDate = sdf.parse(sdf.format(startDate));          endDate = sdf.parse(sdf.format(endDate));          Calendar calendar = Calendar.getInstance();          calendar.setTime(startDate);          long startDay = calendar.getTimeInMillis();          calendar.setTime(endDate);          long endDay = calendar.getTimeInMillis();                    return (int) ((endDay - startDay) / (24 * 60 * 60 *1000));      }            /**       * String类型日期计算相差天数       *       * @param startDate 起始日期       * @param endDate 结束日期       * @return int 如果是-1说明起始日期或者结束日期为null       * @throws ParseException       */      public static int daysMargin(String startDate, String endDate) throws ParseException{          if(null == startDate || null == endDate){              return -1;          }          SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");          Date newStartDate = sdf.parse(startDate);          Date newEndDate = sdf.parse(endDate);          Calendar calendar = Calendar.getInstance();          calendar.setTime(newStartDate);          long startDay = calendar.getTimeInMillis();          calendar.setTime(newEndDate);          long endDay = calendar.getTimeInMillis();          return (int) ((endDay - startDay) / (24 * 60 * 60 *1000));      }  }