1. 程式人生 > >Java 計算兩個日期相差年數字、月數、天數及時分秒

Java 計算兩個日期相差年數字、月數、天數及時分秒

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.apache.log4j.Logger;


public class MyCalendar {
	private static final Logger log = Logger.getLogger(MyCalendar.class);
	private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
	private static Calendar startDate = Calendar.getInstance();
	private static Calendar endDate = Calendar.getInstance();
	private static Date earlydate = new Date();
	private static Date latedate = new Date();

	/**
	 * 計算兩個時間相差多少個年
	 * 
	 * @param early
	 * @param late
	 * @return
	 * @throws ParseException
	 */
	public static int yearsBetween(String start, String end) throws ParseException {
		startDate.setTime(sdf.parse(start));
		endDate.setTime(sdf.parse(end));
		return (endDate.get(Calendar.YEAR) - startDate.get(Calendar.YEAR));
	}

	/**
	 * 計算兩個時間相差多少個月
	 * 
	 * @param date1
	 *            <String>
	 * @param date2
	 *            <String>
	 * @return int
	 * @throws ParseException
	 */
	public static int monthsBetween(String start, String end) throws ParseException {
		startDate.setTime(sdf.parse(start));
		endDate.setTime(sdf.parse(end));
		int result = yearsBetween(start, end) * 12 + endDate.get(Calendar.MONTH) - startDate.get(Calendar.MONTH);
		return result == 0 ? 1 : Math.abs(result);

	}

	/**
	 * 計算兩個時間相差多少個天
	 * 
	 * @param early
	 * @param late
	 * @return
	 * @throws ParseException
	 */
	public static int daysBetween(String start, String end) throws ParseException {
		// 得到兩個日期相差多少天
		return hoursBetween(start, end) / 24;
	}

	/**
	 * 計算兩個時間相差多少小時
	 * 
	 * @param early
	 * @param late
	 * @return
	 * @throws ParseException
	 */
	public static int hoursBetween(String start, String end) throws ParseException {
		// 得到兩個日期相差多少小時
		return minutesBetween(start, end) / 60;
	}

	/**
	 * 計算兩個時間相差多少分
	 * 
	 * @param early
	 * @param late
	 * @return
	 * @throws ParseException
	 */
	public static int minutesBetween(String start, String end) throws ParseException {
		// 得到兩個日期相差多少分
		return secondesBetween(start, end) / 60;
	}

	/**
	 * 計算兩個時間相差多少秒
	 * 
	 * @param early
	 * @param late
	 * @return
	 * @throws ParseException
	 */
	public static int secondesBetween(String start, String end) throws ParseException {
		log.info("==========start:" + start + ",end:" + end);
		earlydate = sdf.parse(start);
		latedate = sdf.parse(end);
		startDate.setTime(earlydate);
		endDate.setTime(latedate);
		// 設定時間為0時
		startDate.set(Calendar.HOUR_OF_DAY, 0);
		startDate.set(Calendar.MINUTE, 0);
		startDate.set(Calendar.SECOND, 0);
		endDate.set(Calendar.HOUR_OF_DAY, 0);
		endDate.set(Calendar.MINUTE, 0);
		endDate.set(Calendar.SECOND, 0);
		// 得到兩個日期相差多少秒
		return ((int) (endDate.getTime().getTime() / 1000) - (int) (startDate.getTime().getTime() / 1000));
	}

	/**
	 * @param args
	 * @throws ParseException
	 */
	public static void main(String[] args) throws ParseException {
		String todayStr = sdf.format(new Date());
		System.out.println("兩個日期之間的年數字:" + yearsBetween("1990-01-07", todayStr));
		System.out.println("兩個日期之間的月數字:" + monthsBetween("1990-01-07", todayStr));
		System.out.println("兩個日期之間的天數字:" + daysBetween("1990-01-07", todayStr));

	}
}

輸出結果:

兩個日期之間的年數字:28
兩個日期之間的月數字:345
兩個日期之間的天數字:10515

原文位置:https://blog.csdn.net/l_hb123/article/details/59058209