JAVA時(shí)間戳-Calendar類使用(包括set,get,add方法)
Calendar 類是一個(gè)抽象類,它為特定時(shí)間與一組諸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日歷字段之間的轉(zhuǎn)換提供了一些方法,并為操作日歷字段(例如獲得下星期的日期)提供了一些方法。
瞬間可用毫秒值來(lái)表示,它是距歷元(即格林威治標(biāo)準(zhǔn)時(shí)間 1970 年 1 月 1 日的 00:00:00.000,格里高利歷)的偏移量。
一、Calendar類
想要取得時(shí)間,首先使用Calendar的getInstance()取得一個(gè)Calendar的實(shí)例,例如:
Calendar c = Calendar.getInstance();
創(chuàng)建 Calendar 對(duì)象不能使用 new 關(guān)鍵字,因?yàn)?Calendar 類是一個(gè)抽象類,但是它提供了一個(gè) getInstance() 方法來(lái)獲得 Calendar類的對(duì)象。
getInstance() 方法返回一個(gè) Calendar 對(duì)象,其日歷字段已 由當(dāng)前日期和時(shí)間初始化。
Calendar 類中定義了許多常量,分別表示不同的意義。
- Calendar.YEAR:年份。
- Calendar.MONTH:月份。
- Calendar.DATE:日期。
- Calendar.DAY_OF_MONTH:日期,和上面的字段意義完全相同。
- Calendar.HOUR:12小時(shí)制的小時(shí)。
- Calendar.HOUR_OF_DAY:24 小時(shí)制的小時(shí)。
- Calendar.MINUTE:分鐘。 Calendar.SECOND:秒。
- Calendar.DAY_OF_WEEK:星期幾。
二、Calendar類的常用方法
2.1 get()方法
獲取值
cal.get(Calendar.YEAR);//年 cal.get(Calendar.MONTH) + 1;//月(Calendar在月份上的常數(shù)值從0開(kāi)始的) cal.get(Calendar.DATE);//日 cal.get(Calendar.HOUR_OF_DAY);//時(shí) cal.get(Calendar.MINUTE);//分 cal.get(Calendar.SECOND);//秒 cal.get(Calendar.DAY_OF_WEEK);//星期(Locale.ENGLISH情況下,周日是1) cal.get(Calendar.DAY_OF_WEEK);//獲取當(dāng)前是一周中的第幾天(從0開(kāi)始計(jì)算) cal.get(Calendar.DAY_OF_MONTH);//獲取當(dāng)前是一月的第幾天 cal.get(Calendar.DAY_OF_YEAR);//獲取當(dāng)前時(shí)一年中的第幾天
示例代碼如下:
public class CalandarTest {
public static void main(String[] args) {
Calendar cal=Calendar.getInstance();
//獲取當(dāng)前年
int year= cal.get(Calendar.YEAR);
System.out.println(year);
//獲取當(dāng)前月(從0開(kāi)始計(jì)算)
int month= cal.get(Calendar.MONTH);
System.out.println(month);
//獲取當(dāng)前日
int date= cal.get(Calendar.DATE);
System.out.println(date);
//獲取當(dāng)時(shí)小時(shí)
int hour= cal.get(Calendar.HOUR);
System.out.println(hour);
//獲取當(dāng)前分鐘數(shù)
int minute= cal.get(Calendar.MINUTE);
System.out.println(minute);
//獲取當(dāng)前秒數(shù)
int second= cal.get(Calendar.SECOND);
System.out.println(second);
//獲取當(dāng)前是一周中的第幾天(從0開(kāi)始計(jì)算)
int wday= cal.get(Calendar.DAY_OF_WEEK);
System.out.println(wday);
//獲取當(dāng)前是一月的第幾天
int mday= cal.get(Calendar.DAY_OF_MONTH);
System.out.println(mday);
//獲取當(dāng)前時(shí)一年中的第幾天
int yday= cal.get(Calendar.DAY_OF_YEAR);
System.out.println(yday);
}
}2.2 set()方法
設(shè)置值(返回為日期對(duì)象)
cal.set(2023, 7, 15, 9, 44, 51);//年月日時(shí)分秒(月份0代表1月) cal.set(Calendar.YEAR, 2023);//年 cal.set(Calendar.MONTH, 7);//月(月份0代表1月) cal.set(Calendar.DATE, 11);//日 cal.set(Calendar.HOUR_OF_DAY, 15);//時(shí) cal.set(Calendar.MINUTE, 33);//分 cal.set(Calendar.SECOND, 32);//秒
示例代碼如下:
public class CalandarTest {
public static void main(String[] args) {
Calendar cal=Calendar.getInstance();
//設(shè)置當(dāng)前年
cal.set(Calendar.YEAR,2022);
System.out.printf("%tY%n",cal);
//設(shè)置當(dāng)前月(從0開(kāi)始計(jì)算)
cal.set(Calendar.MONTH,5);
System.out.printf("%tm%n",cal);
//設(shè)置當(dāng)前日
cal.set(Calendar.DATE,5);
System.out.printf("%td%n",cal);
//設(shè)置當(dāng)時(shí)小時(shí)
cal.set(Calendar.HOUR,14);
System.out.printf("%tl%n",cal);
//設(shè)置當(dāng)前分鐘數(shù)
cal.set(Calendar.MINUTE,50);
System.out.printf("%tM%n",cal);
//設(shè)置當(dāng)前秒數(shù)
cal.set(Calendar.SECOND,12);
System.out.printf("%tS%n",cal);
}
}輸出結(jié)果如下:

2.3 add()方法
運(yùn)算值(在獲取的當(dāng)前時(shí)間進(jìn)行運(yùn)算,返回值為日期對(duì)象)
cal.add(Calendar.YEAR, 1);//年 cal.add(Calendar.MONTH, 1);//月 cal.add(Calendar.DATE, 1);//日 cal.add(Calendar.HOUR_OF_DAY, -1);//時(shí) cal.add(Calendar.MINUTE, 1);//分 cal.add(Calendar.SECOND, 1);//秒 cal.add(Calendar.DATE, 7);//周
示例代碼如下:
public class CalandarTest {
public static void main(String[] args) {
Calendar cal=Calendar.getInstance();
//以當(dāng)前年計(jì)算
cal.add(Calendar.YEAR,2022);
System.out.printf("%tY%n",cal);
//以當(dāng)前月(月份不從0開(kāi)始計(jì)算)計(jì)算
cal.add(Calendar.MONTH,5);
System.out.printf("%tm%n",cal);
//以當(dāng)前日計(jì)算
cal.add(Calendar.DATE,-5);
System.out.printf("%td%n",cal);
//以當(dāng)時(shí)小時(shí)小時(shí)
cal.add(Calendar.HOUR_OF_DAY,14);
System.out.printf("%tl%n",cal);
//以當(dāng)前分鐘數(shù)計(jì)算
cal.add(Calendar.MINUTE,-50);
System.out.printf("%tM%n",cal);
//以當(dāng)前秒數(shù)計(jì)算
cal.add(Calendar.SECOND,12);
System.out.printf("%tS%n",cal);
}
}輸出結(jié)果如下:

三、格式化日期輸出
Calendar類返回的時(shí)間類型為對(duì)象類型,為了方便輸出展示,在輸出時(shí)可以將日期格式化。
| 轉(zhuǎn)換符 | 說(shuō)明 |
| %tH | 小時(shí)(00-23) |
| %tL | 小時(shí)(01-12) |
| %tk | 小時(shí)(0-23) |
| %tM | 分鐘(00-29) |
| %tS | 秒(00-59) |
| %tL | 毫秒(000-999) |
| %tN | 微秒(000000000-999999999) |
| %tp | 當(dāng)前語(yǔ)言環(huán)境下的上午/下午 |
| %ts | 從1970-01-01 00:00:00到現(xiàn)在的秒 |
| %tQ | 從1970-01-01 00:00:00到現(xiàn)在的毫秒 |
| %tF | 年-月-日 |
| %tT | 時(shí)-分-秒 |
| %tD | 月/日/年 |
| %tc | 全部時(shí)間日期 |
| %tR | 時(shí)分 |
| %tr | 時(shí)分秒PM |
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java服務(wù)限流算法的6種實(shí)現(xiàn)
服務(wù)限流是指通過(guò)控制請(qǐng)求的速率或次數(shù)來(lái)達(dá)到保護(hù)服務(wù)的目的,本文主要介紹了Java服務(wù)限流算法的6種實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-05-05
高內(nèi)聚低耦合原則_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
耦合度就是某模塊(類)與其它模塊(類)之間的關(guān)聯(lián)、感知和依賴的程度,是衡量代碼獨(dú)立性的一個(gè)指標(biāo),也是軟件工程設(shè)計(jì)及編碼質(zhì)量評(píng)價(jià)的一個(gè)標(biāo)準(zhǔn)2017-08-08
Java中有界隊(duì)列的飽和策略(reject policy)原理解析
這篇文章主要介紹了Java中有界隊(duì)列的飽和策略(reject policy)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
java自定義ClassLoader加載指定的class文件操作
這篇文章主要介紹了java自定義ClassLoader加載指定的class文件操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
Java高級(jí)特性基礎(chǔ)之反射五連問(wèn)
反射賦予了我們?cè)谶\(yùn)行時(shí)分析類以及執(zhí)行類中方法的能力。通過(guò)反射你可以獲取任意一個(gè)類的所有屬性和方法,你還可以調(diào)用這些方法和屬性。本文就來(lái)和大家詳細(xì)聊聊Java中的反射,感興趣的可以了解一下2023-01-01

