Java的面向?qū)ο缶幊?/a>">Java的面向?qū)ο缶幊?/a>
759
2022-05-29
日期時(shí)間類
Date 類
概述
代碼展示
常用方法
DateFormat 類
構(gòu)造方法
格式規(guī)則
常用方法
format 方法
parse 方法
練習(xí)
思路:
代碼實(shí)現(xiàn)
Calendar 類
概念
常用方法
get/set 方法
add 方法
getTime 方法
Date 類
概述
java.util.Date類表示特定的瞬間, 精確到毫秒.
繼續(xù)查閱 Date 類的描述, 發(fā)現(xiàn) Date 擁有多個(gè)構(gòu)造函數(shù), 只是部分已經(jīng)過時(shí). 但是其中有未過時(shí)的構(gòu)造函數(shù)可以把毫秒值轉(zhuǎn)成日期對(duì)象.
public Date(): 分配 Date 對(duì)象并初始化此對(duì)象, 以表示分配它的時(shí)間 (精確到毫秒).
public Date(long date): 分配 Date 對(duì)象并初始化此對(duì)象, 以表示自從標(biāo)準(zhǔn)基準(zhǔn)時(shí)間 (稱為 “歷元 (epoch)”, 即 1970 年 1 月 1 日 00:00:00 GMT) 以來的指定毫秒數(shù).
代碼展示
簡(jiǎn)單來說: 使用無參構(gòu)造, 可以自動(dòng)設(shè)置當(dāng)前系統(tǒng)時(shí)間的毫秒時(shí)刻. 指定 long 類型的構(gòu)造參數(shù), 可以自定義毫秒時(shí)刻. 例如:
import java.util.Date; public class Test4 { public static void main(String[] args) { // 創(chuàng)建日期對(duì)象, 把當(dāng)前的時(shí)間 System.out.println(new Date()); // 創(chuàng)建日期對(duì)象, 把當(dāng)前時(shí)間的毫秒值轉(zhuǎn)成日期對(duì)象 System.out.println(new Date(0L)); } } 輸出結(jié)果: Thu Nov 26 17:50:49 EST 2020 Wed Dec 31 19:00:00 EST 1969
1
2
3
4
5
6
7
8
9
10
11
12
13
14
注: 在使用 println 方法是, 會(huì)自動(dòng)調(diào)用 Date 類中的 toString 方法. Date 類對(duì) Object 類中的 toString 方法進(jìn)行了覆蓋重寫, 所以結(jié)果為指定格式的字符串.
常用方法
Date 類中的多數(shù)方法已經(jīng)過時(shí), 常用的方法有:
public long getTime(): 把日期對(duì)象轉(zhuǎn)換成對(duì)應(yīng)的時(shí)間毫秒值.
DateFormat 類
java.text.DateFormat是日期/時(shí)間格式化子類的抽象類. 我們通過這個(gè)類可以幫我們完成日期和文本之間的轉(zhuǎn)換, 也就是可以在 Date 對(duì)象與 String 對(duì)象之間進(jìn)行來回轉(zhuǎn)換.
格式化: 按照是定的格式, 從 Date 對(duì)象轉(zhuǎn)化為 String 對(duì)象
解析: 按照指定的格式, 從 String 對(duì)象轉(zhuǎn)化為 Date 對(duì)象
構(gòu)造方法
由于 DateFormat 為抽象類, 不能直接支援, 所以需要常用的子類java.text.SimpleDateFormat. 這個(gè)類需要一個(gè)模式 (格式) 來指定格式化或解析的標(biāo)準(zhǔn). 構(gòu)造方法為:
public SimpleDateFormat(String pattern): 用給定的模式和默認(rèn)語(yǔ)言環(huán)境的日期格式符號(hào)構(gòu)造 SimpleDataFormat. 參數(shù) pattern 是一個(gè)字符串, 代表時(shí)間的自定義格式.
格式規(guī)則
常用的格式規(guī)則為:
注: 更詳細(xì)的格式規(guī)則, 可以參考 SimpleDataFormat 類的 API 文檔.
創(chuàng)建 SimpleDataFormat 對(duì)象的代碼如下:
import java.text.DateFormat; import java.text.SimpleDateFormat; public class Test { public static void main(String[] args) { // 對(duì)應(yīng)的日期格式如: 2020-11-26 16:06:38 DateFormat dateFormat = new SimpleDateFormat("yyy-MM-dd HH:mm:ss"); } }
1
2
3
4
5
6
7
8
9
常用方法
DataFormat 類的常用方法有:
public String format(Date date): 將 Date 對(duì)象格式化為字符串
public Date parse(String source): 將字符串解析為 Date 對(duì)象
format 方法
使用 format 方法的代碼為:
import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; public class Test6 { public static void main(String[] args) { Date date = new Date(); // 創(chuàng)建日期格式對(duì)象, 在獲取格式化對(duì)象時(shí)可以指定風(fēng)格 DateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日"); String str = dateFormat.format(date); System.out.println(str); // 輸出結(jié)果: 2020年11月26日 } }
1
2
3
4
5
6
7
8
9
10
11
12
13
parse 方法
使用 parse 方法的代碼為:
import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Test7 { public static void main(String[] args) throws ParseException { DateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日"); String str = "2020年11月26日"; Date date = dateFormat.parse(str); System.out.println(date); // 輸出結(jié)果: Thu Nov 26 00:00:00 EST 2020 } }
1
2
3
4
5
6
7
8
9
10
11
12
13
練習(xí)
請(qǐng)使用日期時(shí)間相關(guān)的 API, 計(jì)算出一個(gè)人已經(jīng)出生了多少天.
思路:
獲取當(dāng)前時(shí)間對(duì)應(yīng)的毫秒值
獲取自己出生日期對(duì)應(yīng)的毫秒值
兩個(gè)時(shí)間相減 (當(dāng)前時(shí)間-出生日期)
代碼實(shí)現(xiàn)
import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; public class Test { public static void main(String[] args) throws ParseException { System.out.println("請(qǐng)輸入出生日期 格式 yyyy-MM-dd"); // 獲取出生日期, 鍵盤輸入 String birthday = new Scanner(System.in).next(); // 將字符串日期, 轉(zhuǎn)成 Date 對(duì)象 // 創(chuàng)建 SimpleDateFormat 對(duì)象, 寫日期模式 DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); // 調(diào)用方法parse, 字符串轉(zhuǎn)成日期對(duì)象 Date birthdayDate = df.parse(birthday); // 獲取今天的日期對(duì)象 Date todayDate = new Date(); // 將兩個(gè)日期轉(zhuǎn)成毫秒值, Date類的方法getTime long birthdaySecond = birthdayDate.getTime(); long todaySecond = todayDate.getTime(); long secone = todaySecond - birthdaySecond; if (secone < 0){ System.out.println("還沒出生呢"); } else { // 將毫秒準(zhǔn)換為天 System.out.println(secone/1000/60/60/24); } } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Calendar 類
概念
日歷我們都見過, ```java.util.Calendar``是日歷類, 在 Date 后出現(xiàn), 替換掉了許多 Date 的方法. 該類將所有可能用到的時(shí)間信息封裝為靜態(tài)成員變量, 方便獲取. 日歷類就是方便獲取各個(gè)時(shí)間屬性的.
Calendar 為抽象類, 由于語(yǔ)言敏感性, Calendar 類在創(chuàng)建對(duì)象時(shí)并非之間創(chuàng)建, 而是通過靜態(tài)方法創(chuàng)建, 返回子類對(duì)象.
Calendar 靜態(tài)方法
public static Calendar getInstance(): 使用默認(rèn)時(shí)區(qū)和語(yǔ)言環(huán)境獲得一個(gè)日歷.
import java.util.Calendar; public class Test9 { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); } }
1
2
3
4
5
6
7
常用方法
根據(jù) Calender 類的 API 文檔, 常用方法有:
public int get(int field): 返回給定日歷字段的值
public void set(int field, int value): 將給定的日歷字段設(shè)置為給定值
public abstract void add(int field, int amount): 根據(jù)日歷的規(guī)則, 為給定的日歷字段添加或減去指定的時(shí)間量
public Date getTime(): 返回一個(gè)表示此 Calendar 時(shí)間值 (從歷元到現(xiàn)在的毫秒偏移量) 的 Date 對(duì)象
Calendar 類中提供很多成員常量, 代表給定的日歷字段:
get/set 方法
get 方法用來獲取指定字段的值, set 方法用來設(shè)置指定字段的值. 代碼如下:
import java.util.Calendar; public class Test10 { public static void main(String[] args) { // 創(chuàng)建Calendar對(duì)象 Calendar calendar = Calendar.getInstance(); // 獲取年 int year = calendar.get(Calendar.YEAR); // 獲取月 int month = calendar.get(Calendar.MONTH) + 1; // 獲取日 int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); String result = year + "年" + month + "月" + dayOfMonth + "日"; System.out.println(result); // 輸出結(jié)果: 2020年11月26日 } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.Calendar; public class Test11 { public static void main(String[] args) { // 創(chuàng)建Calendar對(duì)象 Calendar calendar = Calendar.getInstance(); // 設(shè)置年 calendar.set(Calendar.YEAR, 2020); // 設(shè)置月 calendar.set(Calendar.MONTH, 0); // 設(shè)置日 calendar.set(Calendar.DAY_OF_MONTH, 26); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
add 方法
add 方法可以對(duì)指定日歷字段進(jìn)行加減操作, 如果第二個(gè)參數(shù)為正數(shù)則加上偏移量, 反則減去偏移量. 代碼如下:
import java.util.Calendar; public class Test12 { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); print(calendar); // 輸出結(jié)果: 2020年11月26日 calendar.add(Calendar.DAY_OF_MONTH, 2); // 加2天 calendar.add(Calendar.YEAR, -3); // 減3年 print(calendar); // 輸出結(jié)果: 2017年11月28日 } public static void print(Calendar calendar){ int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH) + 1; int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); String result = year + "年" + month + "月" + dayOfMonth + "日"; System.out.println(result); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
getTime 方法
Calender 中的 getTime 方法并不是獲取毫秒時(shí)刻, 而是拿到對(duì)應(yīng)的 Date 對(duì)象.
import java.util.Calendar; import java.util.Date; public class Test13 { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); Date date = new Date(); System.out.println(date); // 輸出結(jié)果: Thu Nov 26 23:28:46 EST 2020 } }
1
2
3
4
5
6
7
8
9
10
注: 西方星期的開始為周日, 中國(guó)為周一. 在 Calendar 類中, 月份的表示是以 0-11 代表 1-12 月. 日期是有大小關(guān)系的, 時(shí)間靠后, 時(shí)間越大.
API Java
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。