Java計算兩個日期相差
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){
} 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)); } }</pre>return -1;