計算兩個日期相差

package com.xcfh.util;

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));
    }
}

java

相關文章
相關標籤/搜索