jdk8 time時間類api(二)

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

舉例一種方式:

image

二十、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)類對象。

image
image

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

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

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

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

static TemporalAdjuster firstDayOfYear() 當年的第一天

image

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

二十一、DayOfWeek枚舉類使用

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

image

二十二、自定義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)整為周五。

image
image

二十三、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方法中。

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

image
image

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

image
image

二十五、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ù)處理標準日期和時間的類,我們可以使用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(),可以將當前對象轉(zhuǎn)換為Instant對象,通過給Instan添加時區(qū)信息之后就可以轉(zhuǎn)換為LocalDate對象。

image

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

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

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

image

二十七、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()方法獲取到。

image

二十八、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對象。

image

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

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

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

image

三十、新日期實踐類的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方法

image

三十一、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:精簡顯示(精簡年+月日)

image

三十二、自定義格式化器

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

image
image

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

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容