Java學習總結——時間類
時間類總結
Java常用時間類總結:
-
Date 日期類
-
Calendar 日曆類
-
SimpleDateFormat 格式化時間類
Date和Calendar類 在java.util包中
SimpleDateFormat類 在java.text包
1.Date 日期
【1】new Date() 可以獲取到系統時間
【2】getTime() 能獲取到時間的long形式,可以用來計算時間差
getTime()——獲取計算機底層儲存的數字,返回一個數字用來表示時間,這個數字的型別long,單位為毫秒。
【參考程式碼】
import java.util.Date; public class Test { public static void main(String[] args) { Date d = new Date(); System.out.println(d); // 系統時間 //get...()——獲取年月日..... System.out.println(d.getYear()+1900); // 從1900年開始算的 System.out.println(d.getMonth()+1); // 月份從0開始計算 System.out.println(d.getDate()); // 天數 System.out.println(d.getHours());// 小時 //getTime()——獲取到時間的毫秒形式 返回的是long System.out.println(d.getTime()); } }
2.Calendar 日曆
【1】get() 獲取到時間的某一部分
【2】set() 設定時間 - -> 計算時間:系統已經幫我們設定好了,不用擔心二月有多少天等問題,計算時間十分方便
注:Calendar 日曆類是抽象類,因此不可以去new物件。雖然抽象類不能建立物件,但是jdk官方提供了一個例項物件的操作:
Calendar rightNow = Calendar.getInstance();
我們通過這條程式碼就是直接造了一個Calender的物件
【參考程式碼】:get() 獲取到時間的某一部分:
package date; import java.util.Calendar; public class TestCalendar { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); // System.out.println(cal); /* 假設當天: 2021 8 10 */ cal.set(Calendar.DATE,cal.get(Calendar.DATE)+31); // 計算時間(這裡用天數計算的) // 獲取Calendar建立的物件裡的所有內容 System.out.println(cal.get(Calendar.YEAR)); // 2021 年 System.out.println(cal.get(Calendar.MONTH)+1); // 月份:從0開始的 結果:為10月 System.out.println(cal.get(Calendar.DATE)); // 日 System.out.println(cal.get(Calendar.HOUR_OF_DAY));// 小時 System.out.println(cal.get(Calendar.MINUTE)); System.out.println(cal.get(Calendar.SECOND)); } }
【參考程式碼】:set() 設定時間 - -> 計算時間:
注:cal.setTime(d); 把Date轉化成Calendar
package date; import java.util.Calendar; import java.util.Date; public class TestCalendar { public static void main(String[] args) { Date d = new Date(); Calendar cal = Calendar.getInstance(); cal.setTime(d);// 把Date轉化成Calendar System.out.println(cal); System.out.println(cal.get(Calendar.YEAR)); // 年 System.out.println(cal.get(Calendar.MONTH)+1); // 月份:從0開始的 System.out.println(cal.get(Calendar.DATE)); // 日 } }
3.SimpleDateFormat格式化時間
Date,Calendar通過引用也可以進行時間的格式化,但比較繁瑣,而SimpleDateFormat類是專門幫我們格式化時間的工具類,它在java.text包中。
【時間格式】:yyyy-MM-dd HH:mm:ss
SimpleDateFormat類有兩大常用方法:
【1】format(Date):
format(Date) 幫我們把時間轉成字串,字串的格式為SimpleDateFormat類定義物件時設定的時間格式
【參考程式碼】
package Simple;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.SimpleFormatter;
public class Test {
public static void main(String[] args) {
Date d = new Date();
System.out.println(d); //Thu Aug 12 08:40:08 CST 2021 不美觀
// 設定格式化時間的模式,我們常用yyyy-MM-dd HH:mm:ss這個模式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 時間格式
String s = sdf.format(d); // 格式化時間
System.out.println(s); // 2021-08-12 08:45:09
}
}
【2】parse(String):
parse(String) 幫我們把字串轉化成時間
【參考程式碼】
package Simple;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) throws ParseException {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個時間(yyyy-MM-dd HH:mm:ss):");
String s = sc.nextLine();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse(s); // 把字串轉成時間
System.out.println(d);
/*
請輸入一個時間(yyyy-MM-dd HH:mm:ss):
2021-08-12 12:25:21
Thu Aug 12 12:25:21 CST 2021
*/
}
}
注:由於使用者輸入的字串不一定是我們要求的格式,可能是任何東西,想把它們轉成時間是不可能的,你不可能把一個人轉成時間 對吧,因此存在著很大的風險未處理(異常: java.text.ParseException),為此我們需要處理異常。
4.計算時間差
計算思路:
- 格式化時間
- 先將字串轉化成long型別時間
- 計算毫秒級別時間差,取絕對值
- 毫秒級別時間差轉成秒級別
- 秒級別時間差轉成分鐘級別
- 分鐘級別時間差轉化顯示成xx小時xx分鐘
【參考程式碼】
package Simple;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDiff {
public static void main(String[] args) throws ParseException {
String s1 = "2021-08-12 12:00:00"; // 開始時間
String s2 = "2021-08-12 14:35:00"; // 結束時間
//格式化時間
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
//將字串轉成時間形式
Date d1 = sdf.parse(s1);
Date d2 = sdf.parse(s2);
//計算時間差:先要獲取時間毫秒形式(long型別) 再做差
long long1 = d1.getTime();
long long2 = d2.getTime();
long diffTime = Math.abs(long1 - long2);
// 秒級別時間差
long diffSec = diffTime / 1000;
// 分級別時間差
long diffMin = diffSec / 60;
//顯示 xx小時xx分鐘
long displayHours = diffMin / 60; // 小時
long displayMin = diffMin % 60; //分鐘
System.out.println("您學習的時長為:"+displayHours+"小時"+displayMin+"分鐘");
}
}