使用 Calendar 計算時間
一. 類型轉換
1.1 Date → Calendar
public Calendar date2Calendar(Date date){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar;
}
1.2 Calendar → Date
public Date calendar2Date(Calendar calendar){
return calendar.getTime();
}
二. 時間計算
2.1 ?毫秒
/*
* 計算兩個日期之間的差值:
* 日期1:2019-12-31 12:30:12
* 日期2:2020-01-01 13:31:13
*/
Calendar startCalendar = Calendar.getInstance();
Calendar endCalendar = Calendar.getInstance();
// 手動設置時間
startCalendar.set(2019, Calendar.DECEMBER, 31, 12, 30, 12);
endCalendar.set(2020, Calendar.JANUARY, 1, 13, 31, 13);
startCalendar.set(Calendar.MILLISECOND, 0);
endCalendar.set(Calendar.MILLISECOND, 0);
long startCalendarTimeInMills = startCalendar.getTimeInMillis();
long endCalendarTimeInMills = endCalendar.getTimeInMillis();
long differenceInMills = endCalendarTimeInMills - startCalendarTimeInMills;
System.out.println("相差:" + differenceInMills + "(毫秒)");
代碼執行結果:
相差: 90061000(毫秒)
Process finished with exit code 0
2.2 ?秒
/*
* 計算兩個日期之間的差值:
* 日期1:2019-12-31 12:30:12
* 日期2:2020-01-01 13:31:13
*/
Calendar startCalendar = Calendar.getInstance();
Calendar endCalendar = Calendar.getInstance();
// 手動設置時間
startCalendar.set(2019, Calendar.DECEMBER, 31, 12, 30, 12);
endCalendar.set(2020, Calendar.JANUARY, 1, 13, 31, 13);
startCalendar.set(Calendar.MILLISECOND, 0);
endCalendar.set(Calendar.MILLISECOND, 0);
long startCalendarTimeInMills = startCalendar.getTimeInMillis();
long endCalendarTimeInMills = endCalendar.getTimeInMillis();
long differenceInMills = endCalendarTimeInMills - startCalendarTimeInMills;
//1秒 = 1000毫秒
long differenceInSecond = differenceInMills / 1000;
System.out.println("相差: " + differenceInSecond + "(秒)");
代碼執行結果:
相差: 90061(秒)
Process finished with exit code 0
2.3 ?分鍾
/*
* 計算兩個日期之間的差值:
* 日期1:2019-12-31 12:30:12
* 日期2:2020-01-01 13:31:13
*/
Calendar startCalendar = Calendar.getInstance();
Calendar endCalendar = Calendar.getInstance();
// 手動設置時間
startCalendar.set(2019, Calendar.DECEMBER, 31, 12, 30, 12);
endCalendar.set(2020, Calendar.JANUARY, 1, 13, 31, 13);
startCalendar.set(Calendar.MILLISECOND, 0);
endCalendar.set(Calendar.MILLISECOND, 0);
// 計算毫秒差值
long startCalendarTimeInMills = startCalendar.getTimeInMillis();
long endCalendarTimeInMills = endCalendar.getTimeInMillis();
long differenceInMills = endCalendarTimeInMills - startCalendarTimeInMills;
// 1秒 = 1000毫秒
long differenceInSecond = differenceInMills / 1000;
// 1分鍾 = 60秒
long differenceInMinute = differenceInSecond / 60;
System.out.println("相差: " + differenceInMinute + "(分鍾)");
代碼執行結果:
相差: 1501(分鍾)
Process finished with exit code 0
2.4 ?小時
/*
* 計算兩個日期之間的差值:
* 日期1:2019-12-31 12:30:12
* 日期2:2020-01-01 13:31:13
*/
Calendar startCalendar = Calendar.getInstance();
Calendar endCalendar = Calendar.getInstance();
// 手動設置時間
startCalendar.set(2019, Calendar.DECEMBER, 31, 12, 30, 12);
endCalendar.set(2020, Calendar.JANUARY, 1, 13, 31, 13);
startCalendar.set(Calendar.MILLISECOND, 0);
endCalendar.set(Calendar.MILLISECOND, 0);
// 計算毫秒差值
long startCalendarTimeInMills = startCalendar.getTimeInMillis();
long endCalendarTimeInMills = endCalendar.getTimeInMillis();
long differenceInMills = endCalendarTimeInMills - startCalendarTimeInMills;
// 1秒 = 1000毫秒
long differenceInSecond = differenceInMills / 1000;
// 1分鍾 = 60秒
long differenceInMinute = differenceInSecond / 60;
// 1小時 = 60分鍾 = 3600秒
long differenceInHour = differenceInSecond / 3600;
System.out.println("相差: " + differenceInHour + "(小時)");
代碼執行結果:
相差: 25(小時)
Process finished with exit code 0
2.5 ? 時?分?秒?毫秒
/*
* 計算兩個日期之間的差值:
* 日期1:2019-12-31 12:30:12
* 日期2:2020-01-01 13:31:13
*/
Calendar startCalendar = Calendar.getInstance();
Calendar endCalendar = Calendar.getInstance();
// 手動設置時間
startCalendar.set(2019, Calendar.DECEMBER, 31, 12, 30, 12);
endCalendar.set(2020, Calendar.JANUARY, 1, 13, 31, 13);
startCalendar.set(Calendar.MILLISECOND, 0);
endCalendar.set(Calendar.MILLISECOND, 0);
// 計算毫秒差值
long startCalendarTimeInMills = startCalendar.getTimeInMillis();
long endCalendarTimeInMills = endCalendar.getTimeInMillis();
long differenceInMills = endCalendarTimeInMills - startCalendarTimeInMills;
// 1秒 = 1000毫秒
long differenceInSecond = differenceInMills / 1000;
// 1分鍾 = 60秒
long differenceInMinute = differenceInSecond / 60;
// 1小時 = 60分鍾 = 3600秒
long differenceInHour = differenceInSecond / 3600;
System.out.println("相差: " +
(differenceInSecond / 3600) + "小時" +
(differenceInSecond % 3600) / 60 + "分鍾" +
(differenceInSecond % 3600 % 60) + "秒" +
(differenceInMills % 1000) + "毫秒");
代碼執行結果:
相差: 25小時1分鍾1秒0毫秒
Process finished with exit code 0
三、時間比較
3.1 兩個日期相差幾天?
public static void main(String[] args) {
/*
* 計算兩個日期之間的差值:
* 日期1:2019-12-31 12:30:12
* 日期2:2020-01-01 13:31:13
*/
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
calendar1.set(2019, Calendar.DECEMBER, 31, 12, 30, 12);
calendar2.set(2020, Calendar.JANUARY, 1, 13, 31, 13);
calendar1.set(Calendar.MILLISECOND, 0);
calendar2.set(Calendar.MILLISECOND, 0);
// 1.獲取日期毫秒數
long timeInMills1 = calendar1.getTimeInMillis();
long timeInMills2 = calendar2.getTimeInMillis();
// 2.計算:本日期是自1900年以來的第幾天?
long days1 = timeInMills1 / 1000 / 3600 / 24;
long days2 = timeInMills2 / 1000 / 3600 / 24;
System.out.println("日期 " + calendar1.getTime() +
" 是1900年以來的第" + days1 + "天");
System.out.println("日期 " + calendar2.getTime() +
" 是1900年以來的第" + days2 + "天");
// 3.計算日期相差的天數
long differenceDays = days2 - days1;
System.out.println("兩個日期相差:" + differenceDays + "天");
}
代碼執行結果:
日期 Tue Dec 31 12:30:12 CST 2019 是1900年以來的第18261天
日期 Wed Jan 01 13:31:13 CST 2020 是1900年以來的第18262天
兩個日期相差:1天Process finished with exit code 0