您好,登錄后才能下訂單哦!
這篇文章主要講解了“Java中Date日期時間類怎么使用”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Java中Date日期時間類怎么使用”吧!
java.util 包提供了 Date 類來封裝當(dāng)前的日期和時間。 Date 類提供兩個構(gòu)造函數(shù)來實例化 Date 對象。
第一個構(gòu)造函數(shù)使用當(dāng)前日期和時間來初始化對象:
Date( )
第二個構(gòu)造函數(shù)接收一個參數(shù),該參數(shù)是從 1970 年 1 月 1 日起的毫秒數(shù)。
Date(long millisec)
Date 對象創(chuàng)建以后,可以調(diào)用下面的方法:
序號 | 方法描述 |
---|---|
1 | boolean after(Date date),若當(dāng)調(diào)用此方法的Date對象在指定日期之后返回true,否則返回false |
2 | boolean before(Date date),若當(dāng)調(diào)用此方法的Date對象在指定日期之前返回true,否則返回false |
3 | Object clone( ),返回此對象的副本 |
4 | int compareTo(Date date),比較當(dāng)調(diào)用此方法的Date對象和指定日期。兩者相等時候返回0。調(diào)用對象在指定日期之前則返回負數(shù)。調(diào)用對象在指定日期之后則返回正數(shù) |
5 | int compareTo(Object obj),若obj是Date類型則操作等同于compareTo(Date) 。否則它拋出ClassCastException |
6 | boolean equals(Object date),當(dāng)調(diào)用此方法的Date對象和指定日期相等時候返回true,否則返回false |
7 | long getTime( ),返回自 1970 年 1 月 1 日 00:00:00 GMT 以來此 Date 對象表示的毫秒數(shù) |
8 | int hashCode( ),返回此對象的哈希碼值 |
9 | void setTime(long time),用自1970年1月1日00:00:00 GMT以后time毫秒數(shù)設(shè)置時間和日期 |
10 | String toString( ),把此 Date 對象轉(zhuǎn)換為以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。 |
例如獲取當(dāng)前日期時間并打印:
import java.util.Date; public class DateDemo { public static void main(String[] args) { // 初始化 Date 對象 Date date = new Date(); // 使用 toString() 函數(shù)顯示日期時間 System.out.println(date.toString()); } } // 實例編譯運行結(jié)果如下: // Tue Apr 04 22:50:40 CST 2023
Java使用以下三種方法來比較兩個日期:
使用 getTime() 方法獲取兩個日期(自1970年1月1日經(jīng)歷的毫秒數(shù)值),然后比較這兩個值。
使用方法 before(),after() 和 equals()。例如,一個月的12號比18號早,則 new Date(99, 2, 12).before(new Date (99, 2, 18)) 返回true。
使用 compareTo() 方法,它是由 Comparable 接口定義的,Date 類實現(xiàn)了這個接口。
SimpleDateFormat 是一個以語言環(huán)境敏感的方式來格式化和分析日期的類。SimpleDateFormat 允許你選擇任何用戶自定義日期時間格式來運行。例如:
import java.util.*; import java.text.*; public class DateDemo { public static void main(String[] args) { Date dNow = new Date( ); SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss"); System.out.println("當(dāng)前時間為: " + ft.format(dNow)); } } // 實例編譯運行結(jié)果如下: // 當(dāng)前時間為: 2023-04-04 10:55:24
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss"); 這一行代碼確立了轉(zhuǎn)換的格式,其中 yyyy 是完整的公元年,MM 是月份,dd 是日期,HH:mm:ss 是時、分、秒。注意:有的格式大寫,有的格式小寫,例如 MM 是月份,mm 是分;HH 是 24 小時制,而 hh 是 12 小時制。
時間模式字符串用來指定時間格式。在此模式中,所有的 ASCII 字母被保留為模式字母,定義如下:
字母 | 描述 | 示例 |
---|---|---|
G | 紀元標記 | AD |
y | 四位年份 | 2001 |
M | 月份 | July or 07 |
d | 一個月的日期 | 10 |
h | A.M./P.M. (1~12)格式小時 | 12 |
H | 一天中的小時 (0~23) | 22 |
m | 分鐘數(shù) | 30 |
s | 秒數(shù) | 55 |
S | 毫秒數(shù) | 234 |
E | 星期幾 | Tuesday |
D | 一年中的日子 | 360 |
F | 一個月中第幾周的周幾 | 2 (second Wed. in July) |
w | 一年中第幾周 | 40 |
W | 一個月中第幾周 | 1 |
a | A.M./P.M. 標記 | PM |
k | 一天中的小時(1~24) | 24 |
K | A.M./P.M. (0~11)格式小時 | 10 |
z | 時區(qū) | Eastern Standard Time |
' | 文字定界符 | Delimiter |
" | 單引號 | ` |
printf 方法可以很輕松地格式化時間和日期。使用兩個字母格式,它以 %t 開頭并且以下面表格中的一個字母結(jié)尾。
%tY:輸出四位數(shù)的年份,例如:2023
%ty:輸出兩位數(shù)的年份,例如:23
%tm:輸出兩位數(shù)的月份,例如:02
%tB:輸出月份的全名,例如:February
%tb:輸出月份的縮寫,例如:Feb
%tA:輸出星期的全名,例如:Wednesday
%ta:輸出星期的縮寫,例如:Wed
%td:輸出兩位數(shù)的日期,例如:24
%te:輸出一位或兩位數(shù)的日期,例如:24 或 02
%tH:輸出24小時制的小時數(shù),例如:23
%tI:輸出12小時制的小時數(shù),例如:11
%tM:輸出分鐘數(shù),例如:45
%tS:輸出秒數(shù),例如:30
%tp:輸出上午還是下午,例如:AM 或 PM
%tZ:輸出時區(qū),例如:GMT+08:00
轉(zhuǎn)換符 | 說明 | 示例 |
---|---|---|
%tc | 包括全部日期和時間信息 | 星期六 十月 27 14:21:20 CST 2007 |
%tF | "年-月-日"格式 | 2007-10-27 |
%tD | "月/日/年"格式 | 10/27/07 |
%tr | "HH:MM:SS PM"格式(12時制) | 02:25:51 下午 |
%tT | "HH:MM:SS"格式(24時制) | 14:28:16 |
%tR | "HH:MM"格式(24時制) | 14:28 |
printf格式化日期實例:
格式化日期:
import java.util.Date; public class DateFormatExample { public static void main(String[] args) { Date date = new Date(); System.out.printf("%tY-%tm-%td %tH:%tM:%tS %tZ", date, date, date, date, date, date, date); } } // 執(zhí)行輸出結(jié)果為: // 2023-04-05 09:59:23 CST
使用轉(zhuǎn)換符格式化日期:
import java.util.Date; public class DateDemo { public static void main(String[] args) { // 初始化 Date 對象 Date date = new Date(); //c的使用 System.out.printf("全部日期和時間信息:%tc%n",date); //f的使用 System.out.printf("年-月-日格式:%tF%n",date); //d的使用 System.out.printf("月/日/年格式:%tD%n",date); //r的使用 System.out.printf("HH:MM:SS PM格式(12時制):%tr%n",date); //t的使用 System.out.printf("HH:MM:SS格式(24時制):%tT%n",date); //R的使用 System.out.printf("HH:MM格式(24時制):%tR",date); } } // 實例編譯運行結(jié)果如下: // 全部日期和時間信息:星期三 四月 05 10:06:21 CST 2023 // 年-月-日格式:2023-04-05 // 月/日/年格式:04/05/23 // HH:MM:SS PM格式(12時制):10:06:21 上午 // HH:MM:SS格式(24時制):10:06:21 // HH:MM格式(24時制):10:06
如果你需要重復(fù)提供日期,那么利用這種方式來格式化它的每一部分就有點復(fù)雜了。因此,可以利用一個格式化字符串指出要被格式化的參數(shù)的索引。索引必須緊跟在 % 后面,而且必須以 $ 結(jié)束。例如:
import java.util.Date; public class DateDemo { public static void main(String[] args) { // 初始化 Date 對象 Date date = new Date(); // 使用toString()顯示日期和時間 // %1$索引指向 "Due date:" // %2$索引指向 date System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date); } } // 實例編譯運行結(jié)果如下: // Due date: 四月 05, 2023
或者,你可以使用 < 標志。它表明先前被格式化的參數(shù)要被再次使用。例如:
import java.util.Date; public class DateDemo { public static void main(String[] args) { // 初始化 Date 對象 Date date = new Date(); // 顯示格式化時間 System.out.printf("%s %tB %<te, %<tY", "Due date:", date); } } // 實例編譯運行結(jié)果如下: // Due date: 四月 5, 2023
定義日期格式的轉(zhuǎn)換符可以使日期通過指定的轉(zhuǎn)換符生成新字符串。這些日期轉(zhuǎn)換符如下所示:
import java.util.*; public class DateDemo { public static void main(String[] args) { Date date=new Date(); //b的使用,月份簡稱 String str=String.format(Locale.US,"英文月份簡稱:%tb",date); System.out.println(str); System.out.printf("本地月份簡稱:%tb%n",date); //B的使用,月份全稱 str=String.format(Locale.US,"英文月份全稱:%tB",date); System.out.println(str); System.out.printf("本地月份全稱:%tB%n",date); //a的使用,星期簡稱 str=String.format(Locale.US,"英文星期的簡稱:%ta",date); System.out.println(str); //A的使用,星期全稱 System.out.printf("本地星期的簡稱:%tA%n",date); //C的使用,年前兩位 System.out.printf("年的前兩位數(shù)字(不足兩位前面補0):%tC%n",date); //y的使用,年后兩位 System.out.printf("年的后兩位數(shù)字(不足兩位前面補0):%ty%n",date); //j的使用,一年的天數(shù) System.out.printf("一年中的天數(shù)(即年的第幾天):%tj%n",date); //m的使用,月份 System.out.printf("兩位數(shù)字的月份(不足兩位前面補0):%tm%n",date); //d的使用,日(二位,不夠補零) System.out.printf("兩位數(shù)字的日(不足兩位前面補0):%td%n",date); //e的使用,日(一位不補零) System.out.printf("月份的日(前面不補0):%te",date); } } // 輸出結(jié)果為: // 英文月份簡稱:Apr // 本地月份簡稱:四月 // 英文月份全稱:April // 本地月份全稱:四月 // 英文星期的簡稱:Wed // 本地星期的簡稱:星期三 // 年的前兩位數(shù)字(不足兩位前面補0):20 // 年的后兩位數(shù)字(不足兩位前面補0):23 // 一年中的天數(shù)(即年的第幾天):095 // 兩位數(shù)字的月份(不足兩位前面補0):04 // 兩位數(shù)字的日(不足兩位前面補0):05 // 月份的日(前面不補0):5
SimpleDateFormat 類有一些附加的方法,特別是parse(),它試圖按照給定的SimpleDateFormat 對象的格式化存儲來解析字符串。例如:
import java.util.*; import java.text.*; public class DateDemo { public static void main(String[] args) { SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd"); String input = args.length == 0 ? "1818-11-11" : args[0]; System.out.print(input + " Parses as "); Date t; try { t = ft.parse(input); System.out.println(t); } catch (ParseException e) { System.out.println("Unparseable using " + ft); } } } // 實例編譯運行結(jié)果如下: // 1818-11-11 Parses as Wed Nov 11 00:00:00 CST 1818
sleep()使當(dāng)前線程進入停滯狀態(tài)(阻塞當(dāng)前線程),讓出CPU的使用、目的是不讓當(dāng)前線程獨自霸占該進程所獲的CPU資源,以留一定時間給其他線程執(zhí)行的機會。你可以讓程序休眠一毫秒的時間或者到您的計算機的壽命長的任意段時間。例如,下面的程序會休眠3秒:
import java.util.*; public class SleepDemo { public static void main(String[] args) { try { System.out.println(new Date( ) + "\n"); Thread.sleep(1000*3); // 休眠3秒 System.out.println(new Date( ) + "\n"); } catch (Exception e) { System.out.println("Got an exception!"); } } } // 實例編譯運行結(jié)果如下: // Thu Apr 06 11:18:56 CST 2023 // Thu Apr 06 11:18:59 CST 2023
測量時間間隔(以毫秒為單位)的實例:\color{red}{測量時間間隔(以毫秒為單位)的實例 :}測量時間間隔(以毫秒為單位)的實例:
import java.util.*; public class DiffDemo { public static void main(String[] args) { try { long start = System.currentTimeMillis( ); System.out.println(new Date( ) + "\n"); Thread.sleep(5*60*10); System.out.println(new Date( ) + "\n"); long end = System.currentTimeMillis( ); long diff = end - start; System.out.println("Difference is : " + diff); } catch (Exception e) { System.out.println("Got an exception!"); } } } // 實例編譯運行結(jié)果如下: // Thu Apr 06 11:25:14 CST 2023 // Thu Apr 06 11:25:17 CST 2023 // Difference is : 3038
我們現(xiàn)在已經(jīng)能夠格式化并創(chuàng)建一個日期對象了,但是我們?nèi)绾尾拍茉O(shè)置和獲取日期數(shù)據(jù)的特定部分呢,比如說小時,日,或者分鐘? 我們又如何在日期的這些部分加上或者減去值呢? 答案是使用Calendar 類。
Calendar類的功能要比Date類強大很多,但在實現(xiàn)方式上也比Date類要復(fù)雜一些。
Calendar類是一個抽象類,在實際使用時實現(xiàn)特定的子類的對象,創(chuàng)建對象的過程對程序員來說是透明的,只需要使用getInstance方法創(chuàng)建即可。例如創(chuàng)建一個代表系統(tǒng)當(dāng)前日期的Calendar對象:
Calendar c = Calendar.getInstance();//默認是當(dāng)前日期
或者創(chuàng)建一個指定日期的Calendar對象(注:Calendar 的月份是從 0 開始的):
//創(chuàng)建一個代表2009年6月12日的Calendar對象 Calendar c1 = Calendar.getInstance(); c1.set(2009, 6 - 1, 12);
Calendar類對象字段類型:Calendar類中用以下這些常量表示不同的意義,jdk內(nèi)的很多類其實都是采用的這種思想:
常量 | 描述 |
---|---|
Calendar.YEAR | 年份 |
Calendar.MONTH | 月份 |
Calendar.DATE | 日期 |
Calendar.DAY_OF_MONTH | 日期,和上面的字段意義完全相同 |
Calendar.HOUR | 12小時制的小時 |
Calendar.HOUR_OF_DAY | 24小時制的小時 |
Calendar.MINUTE | 分鐘 |
Calendar.SECOND | 秒 |
Calendar.DAY_OF_WEEK | 星期幾 |
Calendar類對象信息的設(shè)置
set設(shè)置:
調(diào)用 public final void set(int year,int month,int date) 方法。例如:
Calendar c1 = Calendar.getInstance(); c1.set(2009, 6, 12);//把Calendar對象c1的年月日分別設(shè)這為:2009、6、12
如果只設(shè)定某個字段,例如日期的值,則可以使用 public void set(int field,int value) 方法。例如,把 c1對象代表的日期設(shè)置為10號,其他的所有數(shù)值會被重新計算:
Calendar c1 = Calendar.getInstance(); c1.set(Calendar.DATE,10);
其他字段屬性set的意義以此類推。
add設(shè)置:
把c1對象的日期加上10,也就是c1也就表示為10天后的日期,其它所有的數(shù)值會被重新計算:
Calendar c1 = Calendar.getInstance(); c1.add(Calendar.DATE, 10);
把c1對象的日期減去10,也就是c1也就表示為10天前的日期,其它所有的數(shù)值會被重新計算:
Calendar c1 = Calendar.getInstance(); c1.add(Calendar.DATE, -10);
其他字段屬性的add的意義以此類推。
Calendar類對象信息的獲得
Calendar c1 = Calendar.getInstance(); // 獲得年份 int year = c1.get(Calendar.YEAR); // 獲得月份 int month = c1.get(Calendar.MONTH) + 1; // 獲得日期 int date = c1.get(Calendar.DATE); // 獲得小時 int hour = c1.get(Calendar.HOUR_OF_DAY); // 獲得分鐘 int minute = c1.get(Calendar.MINUTE); // 獲得秒 int second = c1.get(Calendar.SECOND); // 獲得星期幾(注意(這個與Date類是不同的):1代表星期日、2代表星期1、3代表星期二,以此類推) int day = c1.get(Calendar.DAY_OF_WEEK);
Calendar類實現(xiàn)了公歷日歷,GregorianCalendar是Calendar類的一個具體實現(xiàn)。Calendar 的getInstance()方法返回一個默認用當(dāng)前的語言環(huán)境和時區(qū)初始化的GregorianCalendar對象。GregorianCalendar定義了兩個字段:AD和BC。這是代表公歷定義的兩個時代。
下面列出GregorianCalendar對象的幾個構(gòu)造方法:
GregorianCalendar() —— 在具有默認語言環(huán)境的默認時區(qū)內(nèi)使用當(dāng)前時間構(gòu)造一個默認的 GregorianCalendar。
GregorianCalendar(int year, int month, int date) —— 在具有默認語言環(huán)境的默認時區(qū)內(nèi)構(gòu)造一個帶有給定日期設(shè)置的 GregorianCalendar。
GregorianCalendar(int year, int month, int date, int hour, int minute) —— 為具有默認語言環(huán)境的默認時區(qū)構(gòu)造一個具有給定日期和時間設(shè)置的 GregorianCalendar。
GregorianCalendar(int year, int month, int date, int hour, int minute, int second) —— 為具有默認語言環(huán)境的默認時區(qū)構(gòu)造一個具有給定日期和時間設(shè)置的 GregorianCalendar。
GregorianCalendar(Locale aLocale) —— 在具有給定語言環(huán)境的默認時區(qū)內(nèi)構(gòu)造一個基于當(dāng)前時間的 GregorianCalendar。
GregorianCalendar(TimeZone zone) —— 在具有默認語言環(huán)境的給定時區(qū)內(nèi)構(gòu)造一個基于當(dāng)前時間的 GregorianCalendar。
GregorianCalendar(TimeZone zone, Locale aLocale) —— 在具有給定語言環(huán)境的給定時區(qū)內(nèi)構(gòu)造一個基于當(dāng)前時間的 GregorianCalendar。
這里是GregorianCalendar 類提供的一些嘗用的方法列表:
void add(int field, int amount) —— 根據(jù)日歷規(guī)則,將指定的(有符號的)時間量添加到給定的日歷字段中。
protected void computeFields() —— 轉(zhuǎn)換UTC毫秒值為時間域值。
protected void computeTime() —— 覆蓋Calendar ,轉(zhuǎn)換時間域值為UTC毫秒值。
boolean equals(Object obj) —— 比較此 GregorianCalendar 與指定的 Object。
int get(int field) —— 獲取指定字段的時間值。
int getActualMaximum(int field) —— 返回當(dāng)前日期,給定字段的最大值。
int getActualMinimum(int field) —— 返回當(dāng)前日期,給定字段的最小值。
int getGreatestMinimum(int field) —— 返回此 GregorianCalendar 實例給定日歷字段的最高的最小值。
Date getGregorianChange() —— 獲得格里高利歷的更改日期。
int getLeastMaximum(int field) —— 返回此 GregorianCalendar 實例給定日歷字段的最低的最大值。
int getMaximum(int field) —— 返回此 GregorianCalendar 實例的給定日歷字段的最大值。
Date getTime() —— 獲取日歷當(dāng)前時間。
long getTimeInMillis() —— 獲取用長整型表示的日歷的當(dāng)前時間。
TimeZone getTimeZone() —— 獲取時區(qū)。
int getMinimum(int field) —— 返回給定字段的最小值。
int hashCode() —— 重寫hashCode。
boolean isLeapYear(int year) —— 確定給定的年份是否為閏年。
void roll(int field, boolean up) —— 在給定的時間字段上添加或減去(上/下)單個時間單元,不更改更大的字段。
void set(int field, int value) —— 用給定的值設(shè)置時間字段。
void set(int year, int month, int date) —— 設(shè)置年、月、日的值。
void set(int year, int month, int date, int hour, int minute) —— 設(shè)置年、月、日、小時、分鐘的值。
void set(int year, int month, int date, int hour, int minute, int second) —— 設(shè)置年、月、日、小時、分鐘、秒的值。
void setGregorianChange(Date date) —— 設(shè)置 GregorianCalendar 的更改日期。
void setTime(Date date) —— 用給定的日期設(shè)置Calendar的當(dāng)前時間。
void setTimeInMillis(long millis) —— 用給定的long型毫秒數(shù)設(shè)置Calendar的當(dāng)前時間。
void setTimeZone(TimeZone value) —— 用給定時區(qū)值設(shè)置當(dāng)前時區(qū)。
String toString() —— 返回代表日歷的字符串。
GregorianCalendar 使用實例:
mport java.util.*; public class GregorianCalendarDemo { public static void main(String[] args) { String months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; int year; // 初始化 Gregorian 日歷 // 使用當(dāng)前時間和日期 // 默認為本地時間和時區(qū) GregorianCalendar gcalendar = new GregorianCalendar(); // 顯示當(dāng)前時間和日期的信息 System.out.print("Date: "); System.out.print(months[gcalendar.get(Calendar.MONTH)]); System.out.print(" " + gcalendar.get(Calendar.DATE) + " "); System.out.println(year = gcalendar.get(Calendar.YEAR)); System.out.print("Time: "); System.out.print(gcalendar.get(Calendar.HOUR) + ":"); System.out.print(gcalendar.get(Calendar.MINUTE) + ":"); System.out.println(gcalendar.get(Calendar.SECOND)); // 測試當(dāng)前年份是否為閏年 if(gcalendar.isLeapYear(year)) { System.out.println("當(dāng)前年份是閏年"); } else { System.out.println("當(dāng)前年份不是閏年"); } } } // 實例編譯運行結(jié)果如下: // Date: Apr 6 2023 // Time: 3:35:13 // 當(dāng)前年份不是閏年
方法實例:\color{red}{方法實例:}方法實例:
時間戳轉(zhuǎn)換成時間:
public class Test { public static void main(String args[]) { // 獲取當(dāng)前時間戳 Long timeStamp = System.currentTimeMillis(); // 時間格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 時間戳轉(zhuǎn)換成時間 String sd = sdf.format(new Date(Long.parseLong(String.valueOf(timeStamp)))); System.out.println("格式化結(jié)果:" + sd); SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy 年 MM 月 dd 日 HH 時 mm 分 ss 秒"); String sd2 = sdf2.format(new Date(Long.parseLong(String.valueOf(timeStamp)))); System.out.println("格式化結(jié)果:" + sd2); } } // 實例編譯運行結(jié)果如下: // 格式化結(jié)果:2023-04-23 14:24:13 // 格式化結(jié)果:2023 年 04 月 23 日 14 時 24 分 13 秒
感謝各位的閱讀,以上就是“Java中Date日期時間類怎么使用”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Java中Date日期時間類怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。