Java8新特性之日期-時(shí)間API

在Java8之前的版本中褐望,我們處理時(shí)間類型常常使用的是java.util包下的Date類勒庄。

但使用Date類卻有諸多的弊端,如:java.util.Date是非線程安全的瘫里,所有的日期類都是可變的实蔽;日期/時(shí)間類的定義并不一致,在java.util和java.sql的包下都含有Date類谨读,在開發(fā)過程中極易出錯(cuò)局装; 日期類并不提供國際化,沒有時(shí)區(qū)支持

為了解決以上問題,Java8在java.time包下提供了很多新的API铐尚,常用的類包括LocalDate拨脉、LocalTime、LocalDateTime,用以處理日期,時(shí)間敢伸,日期/時(shí)間等

LocalDate類

LocalDate是一個(gè)不可變類桶略,在不考慮時(shí)區(qū)的情況下可以對(duì)日期(不包括時(shí)間)進(jìn)行各種操作,它的默認(rèn)格式是yyyy-MM-dd

獲取當(dāng)前日期以及年、月、日

代碼示例:

//獲取當(dāng)前日期以及年、月解阅、日
LocalDatelocalDate=LocalDate.now();
intyear=localDate.getYear();
intmonth=localDate.getMonthValue();
intday=localDate.getDayOfMonth();
System.out.println("當(dāng)前日期:"+localDate);
System.out.println("年:"+year+"月:"+month+"日:"+day);

運(yùn)行結(jié)果:
當(dāng)前日期:2018-12-12
年:2018月:12日:12
獲取指定的日期

代碼示例:

//獲取指定的日期
LocalDatespecifiedDay=LocalDate.of(2008,8,18);
System.out.println("指定日期:"+specifiedDay);

運(yùn)行結(jié)果:

指定日期:2008-08-18
比較兩個(gè)時(shí)間的先后順序以及是否相等

代碼示例:

LocalDatelocalDate=LocalDate.now();
LocalDateotherDate=LocalDate.of(2018,11,11);

//equals方法用于比較兩個(gè)日期是否相等
if(localDate.equals(otherDate)){
System.out.println("localDate與otherDate相等!");
}else{
//isAfter和isBefore方法用于比較兩個(gè)日期前后順序
if(localDate.isAfter(otherDate)){
System.out.println("localDate晚于otherDate闷串!");
}
if(localDate.isBefore(otherDate)){
System.out.println("localDate早于otherDate瓮钥!");
}
}

運(yùn)行結(jié)果:

localDate晚于otherDate!
對(duì)日期做加減運(yùn)算

代碼示例:

LocalDatelocalDate=LocalDate.now();
System.out.println("2年后日期:"+localDate.plusYears(2));
System.out.println("6月后日期:"+localDate.plusMonths(6));
System.out.println("3周后日期:"+localDate.plusWeeks(3));
System.out.println("15天后日期:"+localDate.plusDays(15));

System.out.println("2年前日期:"+localDate.minusYears(2));
System.out.println("6月前日期:"+localDate.minusMonths(6));
System.out.println("3周前日期:"+localDate.minusWeeks(3));
System.out.println("15天前日期:"+localDate.minusDays(15));

運(yùn)行結(jié)果:

2年后日期:2020-12-12
6月后日期:2019-06-12
3周后日期:2019-01-02
15天后日期:2018-12-27

2年前日期:2016-12-12
6月前日期:2018-06-12
3周前日期:2018-11-21
15天前日期:2018-11-27
獲取日期間隔的天數(shù)

代碼示例:

//獲取某年份的第N天的日期
LocalDatespecialDay=LocalDate.ofYearDay(2018,100);
System.out.println("2018年的第100天:"+specialDay);
//獲取兩個(gè)日期的間隔天數(shù)
longintervalDay=localDate.toEpochDay()-specialDay.toEpochDay();
System.out.println("間隔天數(shù):"+intervalDay);

運(yùn)行結(jié)果:
2018年的第100天:2018-04-10
間隔天數(shù):246

LocalTime類

LocalTime與LocalDate一樣烹吵,也是一個(gè)不可變的類碉熄,默認(rèn)格式是hh:mm:ss.zzz,它提供了對(duì)時(shí)間的各種操作

獲取當(dāng)前時(shí)間以及自定義時(shí)間
代碼示例:

//獲取當(dāng)前時(shí)間肋拔、時(shí)锈津、分、秒以及自定義時(shí)間
LocalTimelocalTime=LocalTime.now();
inthour=localTime.getHour();
intminute=localTime.getMinute();
intsecond=localTime.getSecond();
System.out.println("當(dāng)前時(shí)間:"+localTime);
System.out.println("時(shí):"+hour+"分:"+minute+"秒:"+second);

//獲取自定義時(shí)間
LocalTimespecifiedTime=LocalTime.of(15,30,45);
System.out.println("自定義時(shí)間:"+specifiedTime);

運(yùn)行結(jié)果:

當(dāng)前時(shí)間:13:45:59.039
時(shí):13分:45秒:59
自定義時(shí)間:15:30:45
比較兩個(gè)時(shí)間的先后順序

代碼示例:

//equals方法比較兩個(gè)時(shí)間是否相等
if(localTime.equals(specifiedTime)){
System.out.println("localTime與specifiedTime相等凉蜂!");
}else{
//isAfter琼梆、isBefore方法比較兩個(gè)時(shí)間的先后順序
if(localTime.isAfter(specifiedTime)){
System.out.println("localTime晚于specifiedTime!");
}
if(localTime.isBefore(specifiedTime)){
System.out.println("localTime早于specifiedTime窿吩!");
}
}

運(yùn)行結(jié)果:
localTime早于specifiedTime茎杂!
對(duì)時(shí)間做加減運(yùn)算
代碼示例:

LocalTimelocalTime=LocalTime.now();
System.out.println("當(dāng)前時(shí)間:"+localTime);
System.out.println("2小時(shí)后時(shí)間:"+localTime.plusHours(2));
System.out.println("30分鐘后時(shí)間:"+localTime.plusMinutes(30));
System.out.println("500秒后日時(shí)間:"+localTime.plusSeconds(500));

System.out.println("2小時(shí)前時(shí)間:"+localTime.minusHours(2));
System.out.println("30分鐘前時(shí)間:"+localTime.minusMinutes(30));
System.out.println("500秒前時(shí)間:"+localTime.minusSeconds(500));

運(yùn)行結(jié)果:

當(dāng)前時(shí)間:14:10:15.666
2小時(shí)后時(shí)間:16:10:15.666
30分鐘后時(shí)間:14:40:15.666
500秒后時(shí)間:14:18:35.666

2小時(shí)前時(shí)間:12:10:15.666
30分鐘前時(shí)間:13:40:15.666
500秒前時(shí)間:14:01:55.666

LocalDateTime類

LocalDateTime是一個(gè)不可變的日期-時(shí)間對(duì)象,它既包含了日期同時(shí)又含有時(shí)間纫雁,默認(rèn)格式是yyyy-MM-ddTHH-mm-ss.zzz

獲取當(dāng)前日期時(shí)間以及自定義日期時(shí)間

示例代碼:

//獲取當(dāng)前的日期時(shí)間
LocalDateTimelocalDateTime=LocalDateTime.now();
System.out.println("當(dāng)前的日期時(shí)間:"+localDateTime);

//獲取自定義的的日期時(shí)間
LocalDateTimespecifiedDateTime=LocalDateTime.of(LocalDate.now(),LocalTime.now());
System.out.println("自定義的日期時(shí)間:"+specifiedDateTime);

運(yùn)行結(jié)果:

當(dāng)前的日期時(shí)間:2018-12-12T14:31:00.163
自定義的日期時(shí)間:2018-12-12T14:31:00.164

轉(zhuǎn)化為日期和時(shí)間

代碼示例:

//轉(zhuǎn)化為LocalDate和LocalTime
LocalDatelocalDate=localDateTime.toLocalDate();
LocalTimelocalTime=localDateTime.toLocalTime();
System.out.println("當(dāng)前日期:"+localDate);
System.out.println("當(dāng)前時(shí)間:"+localTime);

運(yùn)行結(jié)果:

當(dāng)前日期:2018-12-12
當(dāng)前時(shí)間:14:31:00.163

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末煌往,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子轧邪,更是在濱河造成了極大的恐慌刽脖,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忌愚,死亡現(xiàn)場離奇詭異曲管,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)硕糊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門院水,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腊徙,“玉大人,你說我怎么就攤上這事衙耕∶链” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵橙喘,是天一觀的道長。 經(jīng)常有香客問我胶逢,道長厅瞎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任初坠,我火速辦了婚禮和簸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘碟刺。我一直安慰自己锁保,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布半沽。 她就那樣靜靜地躺著爽柒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪者填。 梳的紋絲不亂的頭發(fā)上浩村,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音占哟,去河邊找鬼心墅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛榨乎,可吹牛的內(nèi)容都是我干的怎燥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蜜暑,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼铐姚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起史煎,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤谦屑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后篇梭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體氢橙,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年恬偷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了悍手。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖坦康,靈堂內(nèi)的尸體忽然破棺而出竣付,到底是詐尸還是另有隱情,我是刑警寧澤滞欠,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布古胆,位于F島的核電站,受9級(jí)特大地震影響筛璧,放射性物質(zhì)發(fā)生泄漏逸绎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一夭谤、第九天 我趴在偏房一處隱蔽的房頂上張望棺牧。 院中可真熱鬧,春花似錦朗儒、人聲如沸颊乘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乏悄。三九已至,卻和暖如春榆鼠,著一層夾襖步出監(jiān)牢的瞬間纲爸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國打工妆够, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留识啦,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓神妹,卻偏偏與公主長得像颓哮,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鸵荠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容