java.time筆記(19-33)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 十九、章節(jié)練習(xí)(2)

舉例一種方式:

Java8TimeMethodTest.java

? ? ? ? ? ? ? ? ? ? ? ?二十渐北、TemporalAdjuster調(diào)節(jié)器的使用

調(diào)節(jié)器TemporalAdjuster與查詢TemporalQuery

with(TemporalAdjuster adjuster)

在上一節(jié)學(xué)習(xí)的with方法中學(xué)習(xí)了可以通過with方法修改日期時間對象中封裝的數(shù)據(jù)危虱,但是有一些時候可能會做一些復(fù)雜的操作转捕,比如說將時間調(diào)整到下個周的周日饭入,下一個工作日各吨,或者本月中的某一天排苍,這個時候可以使用調(diào)節(jié)器TemporalAdjuster來更方便的處理日期沦寂。

with方法有一個重載形式,需要傳入一個TemporalAdjuster對象淘衙,通過查看發(fā)現(xiàn)TemporalAdjuster是一個接口传藏,那么實際上傳入的是這個接口的實現(xiàn)類對象。



TemporalAdjuster函數(shù)式接口

在以上的描述中彤守,發(fā)現(xiàn)了一個叫做TemporalAdjusters的類可以給我們提供一些常用的方法毯侦,方法如下:

TemporalAdjusters類中常用靜態(tài)方法的使用

static TemporalAdjuster firstDayofNextMonth()? ?下個月的第一天

static TemporalAdjuster firstDayOfNextYear()? ?下一年的第一天

static TemporalAdjuster firstDayOfYear()? ? 當(dāng)年的第一天


Java8TimeTemporalAdjusterDemo1.java

注意:TemporalAdjusters 是一個接口,with方法實際上傳入的是這個饑餓口的實現(xiàn)類對象具垫,TemporalAdjusters并不是TemporalAdjuster的實現(xiàn)類侈离,只不過TemporalAdjusters的靜態(tài)方法實現(xiàn)了TemporalAdjuster,并且將實現(xiàn)類對象返回了筝蚕。

? ? ? ? ? ? ? ? ? ? ? ? ? 二十一卦碾、DayOfWeek枚舉類使用

DayOfWeek是一周中星期幾的枚舉類铺坞,其中封裝了從周一到周日


Java8TimeTemporalAdjusterDemo2.java

? ? ? ? ? ? ? ? ? ?二十二、自定義TemporalAdjuster調(diào)節(jié)器

通過Java8本身提供的TemporalAdjusters中的方法可以完成一些常用的操作洲胖,如果要自定義日期時間的更改邏輯济榨,可以通過實現(xiàn)TemporalAdjuster類接口的方式來完成。

1绿映、創(chuàng)建類實現(xiàn)TemporalAdjuster接口

2擒滑、實現(xiàn)TemporalAdjuster中的 adjusterInto()方法,傳入一個日期時間對象绘梦,完成邏輯之后返回日期事件對象橘忱。

3赴魁、通過with方法傳入自定義調(diào)節(jié)器對象完成更改卸奉。

例如:假如員工一個月中領(lǐng)取工資,發(fā)薪日是每個月的15日颖御,如果發(fā)薪日是周末榄棵,則調(diào)整為周五。


PayDayAdjuster.java


Java8TimeTemporalAdjusterDemo3.java

? ? ? ? ? ? ? ? ? ? ? ?二十三潘拱、TemporalQuery的應(yīng)用

學(xué)習(xí)的時態(tài)類對象(LocalDate疹鳄,LocalTime)都有一個方法叫做query,可以針對日期進行查詢芦岂,R? ? query(TemporalQuery query)這個方法是一個泛型方法瘪弓,返回的數(shù)據(jù)就是傳入的泛型類的類型,TemporalQuery是一個泛型接口禽最,里面有一個抽象方法是R? ? queryFrom(TemporalAccessor temporal)腺怯,TemporalAccessor是Temporal的父接口,實際上也就是LocalDate,LocalDateTime相關(guān)類的頂級父接口川无,這個queryFrom的方法的實現(xiàn)邏輯就是呛占,傳入一個日期/時間對象通過自定義邏輯返回數(shù)據(jù)。

如果要計劃日期距離某一天特定天數(shù)差距多少天懦趋,可以自定義類實現(xiàn)TemporalQuery接口并且作為參數(shù)傳到query方法中晾虑。

例如:計算當(dāng)前時間距離下一個勞動節(jié)還有多少天?


UtilDayQueryImpl.java


Java8TimeTemporalQueryDemo1.java

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 二十四仅叫、章節(jié)練習(xí)(3)


TestQueryImpl.java


Java8TimeTemporalQueryTest2.java

? ? ? ? ? ? 二十五帜篇、java.util.Date轉(zhuǎn)換為java.time.LocalDate(1)

對于老項目的改造,需要將Date或者Calendar轉(zhuǎn)換為java.util包中相應(yīng)的類的诫咱,可以根據(jù)本小節(jié)中提供的方法進行改造笙隙。

Java8中的java.time中并沒有提供太多的內(nèi)置方式來轉(zhuǎn)換java.util包中用預(yù)處理標(biāo)準日期和時間的類,我們可以使用Instant類作為中介遂跟,也可以使用java.sql.Date和java.sql.TimeStamp類提供的方法進行轉(zhuǎn)換逃沿。

使用Instant類將java.util.Date轉(zhuǎn)換為java.time.LocalDate

java.time包中并沒有提供很多的方式來進行直接轉(zhuǎn)換婴渡,但是給之前的Date類,Calendar類在java1.8都提供了一個新的方法凯亮,叫做toInstant()边臼,可以將當(dāng)前對象轉(zhuǎn)換為Instant對象,通過給Instan添加時區(qū)信息之后就可以轉(zhuǎn)換為LocalDate對象假消。


Java8DateToLocalDateDemo1.java

? ? ? ?二十六柠并、java.sql.Date與java.sql.Timestamp的轉(zhuǎn)換方式

java.sql.Date類中提供直接轉(zhuǎn)換為LocalDate的方法,toLocalDate()

java.sql.Timestamp類是時間戳對象,通過傳入一個毫秒值對象進行初始化


Java8DateToLocalDemo2.java

? ? ? 二十七富拗、java.util.Date轉(zhuǎn)換為java.time.LocalDate方式(2)

將java.util.Date類轉(zhuǎn)換為java.time.LocalDate類的第二種方法

java.sql.Date類提供了轉(zhuǎn)換為LocalDate的方法臼予,那么可以將java.util.Date先轉(zhuǎn)換為java.sql.Date。

通過java.sql.Date的構(gòu)造方法直接傳入一個毫秒值可以構(gòu)造一個java.sql.Date對象啃沪,毫秒值可以通過java.util.Date對象的getTime()方法獲取到粘拾。


Java8DateToLocalDateDemo4.java

? ? ? ? ? ? ? ? ?二十八、Calendar轉(zhuǎn)換為ZonedDateTime

Calendar對象字Java1.1開始提供了一個方法獲取時區(qū)對象的方法创千,getTimeZone()缰雇,要將Calendar對象轉(zhuǎn)換為ZonedDateTime需要先獲取到時區(qū)對象。從Java1.8開始TimeZone類提供了一個方法可以獲取到ZonedId追驴。獲取到ZonedId之后就可以初始化ZOnedDateTime對象了械哟,ZonedDateTime類有一個ofInstant()方法,可以將一個Instant對象和ZonedId對象作為參數(shù)傳入構(gòu)造一個ZonedDateTime對象殿雪。


Java8TimeCalendarToZoneedDateTimeDemo1.java

? ? ? ? ? ? ? ? ?二十九暇咆、Calendar轉(zhuǎn)換為LocalDateTime

java.util.Calendar類轉(zhuǎn)換為java.time.LocalDateTime類

Calendar對象可以獲取到年月日時分秒的信息,這些信息可以作為LocalDateTime構(gòu)造方法的參數(shù)


Java8TimeCalendarToLocalDateTimeDemo1.java

? ? ? ? ? ? ? ? 三十丙曙、新日期實踐類的parse和format方法

SimpleDateFormat類在剛開始的時候講過了是線程不安全的爸业,所以Java8提供了新的格式化類 DateTimeFormatter

dateTimeFormatter類提供了大量預(yù)定義格式化器,包括常量(如ISO_LOCAL_DATE)河泳,模式字母(如yyyy-MM-dd)以及本地化樣式沃呢。

與SimpleDateFormat不同的是,新版本的日期/時間API的格式化與解析不需要再創(chuàng)建轉(zhuǎn)換器對象了拆挥,通過時間日期對象的parse/format方法可以直接進行轉(zhuǎn)換.

LocalDate類定義的parse和format方法


java8TimeFormatAndParseDemo1.java

? ? ? ? ? ? ? ? ? ? ? ? ????三十一薄霜、ofLocalizedDate方法

對日期進行格式化

通過DateTimeFormatter的ofLocalizedDate的方法也可以調(diào)整格式化的方式。

public static DateTimeFormatter ofLocalizedDate(FormatStyle dateStyle) {

? ? Objects.requireNonNull(dataStyle, message:"dateStyle");

? ? return new DateTimeFormatterBuilder().appendLocalized(dateStyle,timeStyle:"null")

? ? ? ? ? ? .toFormatter(ResolverStyle.Smart, IsoChronology.Instance);

}

此方法需要傳入一個FormatStyle類對象纸兔,擦好看后發(fā)現(xiàn)FormaStyle對象是一個枚舉類惰瓜,其中有幾種方式如下:

Full:全顯示(年月日+星期) Long:全顯示(年月日) Medium:縮略顯示(沒有年月日漢字) SHORT:精簡顯示(精簡年+月日)

Java8TimeFormatAndParseDemo2.java

? ? ? ? ? ? ? ? ? ? ? ? ????????三十二、自定義格式化器

除了系統(tǒng)自帶的方式之外汉矿,也可以通過DateTimeFormatter類提供的ofPattern方式創(chuàng)建自定時格式化器崎坊,格式化的寫法與之前使用SimpleDateFormat相同。



Java8TimeFormatAndParseDemo3.java

? ? ? ? ? ? ? ? ? ? ? ? ????????三十三洲拇、章節(jié)練習(xí)(4)


Java8TimeFormatAndParseTest1.java

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 結(jié)????束

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奈揍,一起剝皮案震驚了整個濱河市曲尸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌男翰,老刑警劉巖另患,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蛾绎,居然都是意外死亡昆箕,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門租冠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鹏倘,“玉大人,你說我怎么就攤上這事顽爹∠吮茫” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵话原,是天一觀的道長夕吻。 經(jīng)常有香客問我诲锹,道長繁仁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任归园,我火速辦了婚禮黄虱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘庸诱。我一直安慰自己捻浦,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布桥爽。 她就那樣靜靜地躺著朱灿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪钠四。 梳的紋絲不亂的頭發(fā)上盗扒,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機與錄音缀去,去河邊找鬼侣灶。 笑死,一個胖子當(dāng)著我的面吹牛缕碎,可吹牛的內(nèi)容都是我干的褥影。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼咏雌,長吁一口氣:“原來是場噩夢啊……” “哼凡怎!你這毒婦竟也來了校焦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤统倒,失蹤者是張志新(化名)和其女友劉穎斟湃,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體檐薯,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡凝赛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了坛缕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片墓猎。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖赚楚,靈堂內(nèi)的尸體忽然破棺而出毙沾,到底是詐尸還是另有隱情,我是刑警寧澤宠页,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布左胞,位于F島的核電站,受9級特大地震影響举户,放射性物質(zhì)發(fā)生泄漏烤宙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一俭嘁、第九天 我趴在偏房一處隱蔽的房頂上張望躺枕。 院中可真熱鬧,春花似錦供填、人聲如沸拐云。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叉瘩。三九已至,卻和暖如春粘捎,著一層夾襖步出監(jiān)牢的瞬間薇缅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工晌端, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留捅暴,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓咧纠,卻偏偏與公主長得像蓬痒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子漆羔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355