Java 計算兩個日期相差年數字、月數、天數及時分秒
阿新 • • 發佈:2018-11-05
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