時間類介紹
在java中,時間類主要有Date、Calendar,暫時只介紹java.util.*
下的時間類,對於java.sql.*
下的先不做介紹。
主要內容有以下幾個。
- 1、如何獲取當前時間引數
- 2、如何過去某一個月第一天和最後一天
- 3、如何加減日期
- 4、獲取兩個時間之間的時間差
首先,我們需要了解API下對其的介紹,對於Date,很多方法已經過時遷移到了Calendar類上,但是這是最初的時間類,構造方法主要介紹兩種即
Date date= new Date();//分配物件並初始話
Date date= new Date(long date)//分配 Date 物件並初始化此物件,以表示自從標準基準時間(稱為“曆元(epoch)”,即 1970 年 1 月 1 日00:00:00 GMT)以來的指定毫秒數。
可以看得出來,Date是以曆元為標準的,簡單的驗證下你的猜想。new Date().getYear() 的值是 120 然而今年是 2020 。
對於Calendar,與Date不同的是,他對Date的時間曆元進行偏移,要是看括號裡的有點暈可不看。API(Calendar 類是一個抽象類,它為特定瞬間與一組諸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日曆欄位之間的轉換提供了一些方法,併為操作日曆欄位(例如獲得下星期的日期)提供了一些方法。瞬間可用毫秒值來表示,它是距曆元(即格林威治標準時間 1970 年 1 月 1 日的 00:00:00.000,格里高利曆)的偏移量)。
Calendar不得不說的就是類方法 getInstance,Calendar 的 getInstance 方法返回一個 Calendar 物件,其日曆欄位已由當前日期和時間初始化
Calendar rightNow = Calendar.getInstance();
實踐
- 1.如何獲取當前引數
public void getCurrentTime() {
Date NowDate = new Date();
//具體日期格式後面自己修改,HH代表24小時制,hh代表12小時制,
SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM-dd a hh:mm:ss");
String CurrentTime1 = formatter1.format(NowDate);
String CurrentTime2 = formatter2.format(NowDate);
System.out.println(CurrentTime1);
System.out.println(CurrentTime2);
}
輸出結果:
2020-09-02 08:45:25
2020-09-02 上午 08:45:25
- 2.如何獲取某個月的第一天和最後一天
//獲取某年某月的最後一天
//注意月份是按0---11總共12個月,不是從1開始的,但是一個月幾號第幾天卻是從1開始的
/**
* @param year 對應的年份
* @param month 對應的月份
* @return
*/
public static String getLastDayOfMonth(int year,int month) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR,year);
calendar.set(Calendar.MONTH,month-1);
calendar.set(Calendar.DAY_OF_MONTH,calendar.getActualMaximum(Calendar.DATE));
SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd");
String date = sdf.format(calendar.getTime());
return date;
}
//獲取某年某月的第一天
public static String getFirstDayOfMonth(int year,int month) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR,year);
calendar.set(Calendar.MONTH,month-1);
calendar.set(Calendar.DAY_OF_MONTH,calendar.getActualMinimum(Calendar.DATE));
SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd");
String date = sdf.format(calendar.getTime());
return date;
}
測試:
public void test() {
String firstDayOfMonth = CalendarUtil.getFirstDayOfMonth(2020, 9);
String lastDayOfMonth = CalendarUtil.getLastDayOfMonth(2020, 9);
System.out.println(firstDayOfMonth+"---"+lastDayOfMonth);
}
輸出結果
2020-09-01---2020-09-30
- 3.如何加減日期
Calendar類中提供了add方法
add(f, delta)將 delta 新增到 f 欄位中,主要有兩個規則
Add 規則 1: 呼叫後 f 欄位的值減去呼叫前 f 欄位的值等於 delta,以欄位 f 中發生的任何溢位為模。溢位發生在欄位值超出其範圍時,結果,下一個更大的欄位會遞增或遞減,並將欄位值調整回其範圍內。
Add 規則 2: 如果期望某一個更小的欄位是不變的,但讓它等於以前的值是不可能的,因為在欄位 f 發生更改之後,或者在出現其他約束之後,比如時區偏移量發生更改,它的最大值和最小值也在發生更改,然後它的值被調整為儘量接近於所期望的值。更小的欄位表示一個更小的時間單元。HOUR 是一個比 DAY_OF_MONTH 小的欄位。對於不期望是不變欄位的更小欄位,無需進行任何調整。日曆系統會確定期望不變的那些欄位。
程式碼示例:
//往後n天的日期
public static String getTargetDay(int day) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH,+day);
Date time = calendar.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String date = sdf.format(time);
return date;
}
測試:
public void test5() {
String targetDay1 = CalendarUtil.getTargetDay(20);
String targetDay2 = CalendarUtil.getTargetDay(-20);
System.out.println(targetDay1);
System.out.println(targetDay2);
}
結果:
例如現在是9月2日,往後推20天就是22日,往前推20天就是8月13日
2020-09-22
2020-08-13
- 4.獲取兩個時間之間的時間差
方法很多,就不贅述了,主要是將時間轉化為時間時間戳,最後通過兩個時間對應的時間戳進行計算。最後將 long 型別的時間戳轉換為自己需要的時間的格式
本作品採用《CC 協議》,轉載必須註明作者和本文連結