Java?Date類的使用方式(日期處理)
Java Date類的使用
在Java中獲取當(dāng)前時間,可以使用 java.util.Date 類和 java.util.Calendar 類完成。
其中,Date 類主要封裝了系統(tǒng)的日期和時間的信息,Calendar 類則會根據(jù)系統(tǒng)的日歷來解釋 Date 對象。
下面詳細(xì)介紹Date類的具體使用。
Date 類
Date 類表示系統(tǒng)特定的時間戳,可以精確到毫秒。
Date 對象表示時間的默認(rèn)順序是星期、月、日、小時、分、秒、年。
1. 構(gòu)造方法
Date 類有如下兩個構(gòu)造方法。
Date():此種形式表示分配 Date 對象并初始化此對象,以表示分配它的時間(精確到毫秒),使用該構(gòu)造方法創(chuàng)建的對象可以獲取本地的當(dāng)前時間。Date(long date):此種形式表示從 GMT 時間(格林尼治時間)1970 年 1 月 1 日 0 時 0 分 0 秒開始經(jīng)過參數(shù) date 指定的毫秒數(shù)。
這兩個構(gòu)造方法的使用示例如下:
Date date1 = new Date(); // 調(diào)用無參數(shù)構(gòu)造函數(shù) System.out.println(date1.toString()); // 輸出:Wed May 18 21:24:40 CST 2016 Date date2 = new Date(60000); // 調(diào)用含有一個long類型參數(shù)的構(gòu)造函數(shù) System.out.println(date2); // 輸出:Thu Jan 0108:01:00 CST 1970
Date 類的無參數(shù)構(gòu)造方法獲取的是系統(tǒng)當(dāng)前的時間,顯示的順序為星期、月、日、小時、分、秒、年。
Date 類帶 long 類型參數(shù)的構(gòu)造方法獲取的是距離 GMT 指定毫秒數(shù)的時間,60000 毫秒是一分鐘,而 GMT(格林尼治標(biāo)準(zhǔn)時間)與 CST(中央標(biāo)準(zhǔn)時間)相差 8 小時,也就是說 1970 年 1 月 1 日 00:00:00 GMT 與 1970 年 1 月 1 日 08:00:00 CST 表示的是同一時間。
因此距離 1970 年 1 月 1 日 00:00:00 CST 一分鐘的時間為 1970 年 1 月 1 日 00:01:00 CST,即使用 Date 對象表示為 Thu Jan 01 08:01:00 CST 1970。
2. 常用方法
Date 類提供了許多與日期和事件相關(guān)的方法,其中常見的方法如下表所示。
| 方法 | 描述 |
|---|---|
| boolean after(Date when) | 判斷此日期是否在指定日期之后 |
| boolean before(Date when) | 判斷此日期是否在指定日期之前 |
| int compareTo(Date anotherDate) | 比較兩個日期的順序 |
| boolean equals(Object obj) | 比較兩個日期的相等性 |
| long getTime() | 返回自 1970 年 1 月 1 日 00:00:00 GMT 以來,此 Date 對象表示的毫秒數(shù) |
| String toString() | 把此 Date 對象轉(zhuǎn)換為以下形式的 String: dow mon dd hh:mm:ss zzz yyyy。 其中 dow 是一周中的某一天(Sun、Mon、Tue、Wed、Thu、Fri 及 Sat) |
例 1:
- 下面使用一個實例來具體演示 Date 類的使用。
- 假設(shè),某一天特定時間要去做一件事,而且那個時間已經(jīng)過去一分鐘之后才想起來這件事還沒有辦,這時系統(tǒng)將會提示已經(jīng)過去了多 長時間。
具體的代碼如下:
import java.util.Date;
import java.util.Scanner;
public class Test11 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("請輸入要做的事情:");
String title = input.next();
Date date1 = new Date(); // 獲取當(dāng)前日期
System.out.println("[" + title + "] 這件事發(fā)生時間為:" + date1);
try {
Thread.sleep(60000);// 暫停 1 分鐘
} catch (InterruptedException e) {
e.printStackTrace();
}
Date date2 = new Date();
System.out.println("現(xiàn)在時間為:" + date2);
if (date2.before(date1)) {
System.out.println("你還有 " + (date2.getTime() - date1.getTime()) / 1000 + " 秒需要去完成【" + title + "】這件事!");
} else {
System.out.println("【" + title + "】事情已經(jīng)過去了 " + (date2.getTime() - date1.getTime()) / 1000 + " 秒");
}
}
}在該程序中,分別使用 Date 類的無參數(shù)構(gòu)造方法創(chuàng)建了兩個 Date 對象。
在創(chuàng)建完第一個 Date 對象后,使用 Thread.sleep() 方法讓程序休眠 60 秒,然后再創(chuàng)建第二個 Date 對象,這樣第二個 Date 對象所表示的時間將會在第一個 Date 對象所表示時間之后,因此“date2.before(date1)”條件表達(dá)式不成立,從而執(zhí)行 else 塊中的代碼,表示事情已經(jīng)發(fā)生過。
運行該程序,執(zhí)行結(jié)果如下所示:
請輸入要做的事情:
收快遞
【收快遞】這件事發(fā)生時間為:Fri Oct 12 11:11:07 CST 2018
現(xiàn)在時間為:Fri Oct 12 11:12:07 CST 2018
【收快遞】事情已經(jīng)過去了 60 秒
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決mybatis返回boolean值時數(shù)據(jù)庫返回null的問題
這篇文章主要介紹了解決mybatis返回boolean值時數(shù)據(jù)庫返回null的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11
Java?foreach在lambda的foreach遍歷中退出操作(lambda?foreach?break)
本文詳細(xì)講解了在Java的中,特別是在使用forEach()方法時,無法直接使用break或continue關(guān)鍵字來直接控制循環(huán)流程的問題,以及提供了三種解決方案,包括使用異常中斷、流式編程的limit()和原子布爾標(biāo)志位,感興趣的朋友跟隨小編一起看看吧2026-05-05
java面試JDK8?new?ReentrantLock()加鎖流程解析
這篇文章主要為大家介紹了java面試JDK8?new?ReentrantLock()加鎖流程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
intellij idea旗艦版解決學(xué)生無法注冊問題詳解
這篇文章主要介紹了intellij idea旗艦版解決學(xué)生無法注冊問題詳解,文中通過圖文示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
spring cloud將spring boot服務(wù)注冊到Eureka Server上的方法
本篇文章主要介紹了spring cloud將spring boot服務(wù)注冊到Eureka Server上的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01

