摘要:上一篇文章,小樂(lè)給大家?guī)?lái)了新特性之,接下來(lái)本文將會(huì)給大家介紹新特性之前言通過(guò)發(fā)布新的來(lái)進(jìn)一步加強(qiáng)對(duì)日期與時(shí)間的處理。
上一篇文章,小樂(lè)給大家?guī)?lái)了Java8新特性之Optional,接下來(lái)本文將會(huì)給大家介紹Java8新特性之Date API
前言:Java 8通過(guò)發(fā)布新的Date-Time API來(lái)進(jìn)一步加強(qiáng)對(duì)日期與時(shí)間的處理。 舊版的 Java 中,日期時(shí)間 API 存在諸多問(wèn)題 :
非線程安全?? java.util.Date 是非線程安全的,所有的日期類(lèi)都是可變的,
設(shè)計(jì)很差?? Java的日期/時(shí)間類(lèi)的定義并不一致,在java.util和java.sql的包中都有日期類(lèi),此外用于格式化和解析的類(lèi)在java.text包中定義。
時(shí)區(qū)處理麻煩?? 日期類(lèi)并不提供國(guó)際化,沒(méi)有時(shí)區(qū)支持
Java 8 在?java.time?包下提供了很多新的 API。以下為兩個(gè)比較重要的 API:
Local(本地)?: 簡(jiǎn)化了日期時(shí)間的處理,沒(méi)有時(shí)區(qū)的問(wèn)題。
Zoned(時(shí)區(qū))?? 通過(guò)制定的時(shí)區(qū)處理日期時(shí)間。
新的java.time包涵蓋了所有處理日期,時(shí)間,日期/時(shí)間,時(shí)區(qū),時(shí)刻(instants),過(guò)程(during)與時(shí)鐘(clock)的操作。
1、LocalDateTimeLocalDateTime ldt = LocalDateTime.now(); // 獲取系統(tǒng)當(dāng)前時(shí)間 System.out.println(ldt); LocalDateTime ldt2 = LocalDateTime.of(2019, 01, 01, 12, 12, 12, 888000000); // 構(gòu)建LocalDateTime對(duì)象ldt System.out.println(ldt2); // 獲取明年此時(shí)的時(shí)間 LocalDateTime ldt3 = ldt.plusYears(1); System.out.println(ldt3); // 獲取去年此刻時(shí)間 LocalDateTime ldt4 = ldt.minusYears(1); System.out.println(ldt4); // 獲取年 System.out.println(ldt.getYear()); // 獲取月份 System.out.println(ldt.getMonthValue()); // 獲取本月第某天 System.out.println(ldt.getDayOfMonth()); // 獲取時(shí) System.out.println(ldt.getHour()); // 獲取分 System.out.println(ldt.getMinute()); // 獲取秒 System.out.println(ldt.getSecond()); // 獲取納秒 System.out.println(ldt.getNano());2、時(shí)間戳
時(shí)間戳:以Unix元年:1970年1月1日 00:00:00 至目前時(shí)間之間的毫秒值 public static void testInstant(){ // 時(shí)間戳 Instant Instant ins1 = Instant.now(); // 默認(rèn)獲取UTC時(shí)間,協(xié)調(diào)世界時(shí) System.out.println(ins1); OffsetDateTime odt = ins1.atOffset(ZoneOffset.ofHours(8)); System.out.println(odt); System.out.println(ins1.toEpochMilli()); Instant ins2 = Instant.ofEpochSecond(60); System.out.println(ins2); }3、日期時(shí)間間隔計(jì)算:Duration、Period
public static void testDuration(String[] args) { Instant ins1 = Instant.now(); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } Instant ins2 = Instant.now(); Duration dura = Duration.between(ins1, ins2); System.out.println(dura.toMillis()); System.out.println("----------------------"); LocalTime lt1 = LocalTime.now(); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } LocalTime lt2 = LocalTime.now(); Duration dura2 = Duration.between(lt1, lt2); System.out.println(dura2.toMillis()); } public static void testPeriod(){ LocalDate ld1 = LocalDate.of(2015, 2, 2); LocalDate ld2 = LocalDate.now(); Period period = Period.between(ld1, ld2); System.out.println(period); System.out.println("相差" + period.getYears() + "年" + period.getMonths() + "月" + period.getDays() + "天"); }4、時(shí)間校正:TemporalAdjuster
public static void testTemporalAdjuster(){ LocalDateTime ldt = LocalDateTime.now(); System.out.println(ldt); LocalDateTime ldt2 = ldt.withDayOfMonth(10); System.out.println(ldt2); LocalDateTime ldt3 = ldt.with(TemporalAdjusters.next(DayOfWeek.SATURDAY)); System.out.println(ldt3); }5、日期時(shí)間格式化
public static void testDateFormate(){ DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE; LocalDateTime ldt = LocalDateTime.now(); String strDate = ldt.format(dtf); System.out.println(strDate); System.out.println("----------------------------"); DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss"); String strDate2 = dtf2.format(ldt); System.out.println(strDate2); System.out.println("-----------------------------"); LocalDateTime newDate = ldt.parse(strDate2, dtf2); System.out.println(newDate); }6、TimeZone 時(shí)區(qū)處理
// 時(shí)區(qū)的處理 public static void testTimeZone(){ LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Europe/Dublin")); System.out.println(ldt); LocalDateTime ldt2 = LocalDateTime.now(ZoneId.of("Europe/Dublin")); ZonedDateTime zdt = ldt2.atZone(ZoneId.of("Europe/Dublin")); System.out.println(zdt); }
這次就分享到這里了,后面小樂(lè)會(huì)繼續(xù)給大家介紹Java8新特性的,請(qǐng)大家繼續(xù)多多關(guān)注哦!樂(lè)字節(jié)只講Java技術(shù)干貨。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/77601.html
摘要:上一篇小樂(lè)給大家說(shuō)了樂(lè)字節(jié)新特性之,接下來(lái)小樂(lè)繼續(xù)給大家說(shuō)一說(shuō)新特性之和重復(fù)注解與類(lèi)型注解。內(nèi)部類(lèi)與方法相關(guān)的內(nèi)部類(lèi)這是一個(gè)靜態(tài)類(lèi)。也是一個(gè)靜態(tài)類(lèi)。 上一篇小樂(lè)給大家說(shuō)了《樂(lè)字節(jié)-Java8新特性之Date API》,接下來(lái)小樂(lè)繼續(xù)給大家說(shuō)一說(shuō)Java8新特性之Base64和重復(fù)注解與類(lèi)型注解。 一、Base64 在Java 8中,內(nèi)置了Base64編解碼相關(guān)的特性。Java 8中使用...
摘要:上一篇小樂(lè)介紹了新特性函數(shù)式接口,大家可以點(diǎn)擊回顧。中引入方法引用新特性用于簡(jiǎn)化應(yīng)用對(duì)象方法的調(diào)用,方法引用是用來(lái)直接訪問(wèn)類(lèi)或者實(shí)例的已經(jīng)存在的方法或者構(gòu)造方法。方法引用是一種更簡(jiǎn)潔易懂的表達(dá)式。 上一篇小樂(lè)介紹了《Java8新特性-函數(shù)式接口》,大家可以點(diǎn)擊回顧。這篇文章將接著介紹Java8新特性之方法引用。 Java8 中引入方法引用新特性,用于簡(jiǎn)化應(yīng)用對(duì)象方法的調(diào)用,?方法引用是...
摘要:注意當(dāng)多個(gè)父接口中存在相同的默認(rèn)方法時(shí),子類(lèi)中以就近原則繼承。定義靜態(tài)默認(rèn)方法這是版簡(jiǎn)易計(jì)算器接口默認(rèn)方法使用定義接口并提供默認(rèn)打印方法定義接口默認(rèn)方法支持方法形參這是數(shù)值運(yùn)算基本接口。。。 總概 JAVA8 已經(jīng)發(fā)布很久,而且毫無(wú)疑問(wèn),java8是自java5(2004年發(fā)布)之后的最重要的版本。其中包括語(yǔ)言、編譯器、庫(kù)、工具和JVM等諸多方面的新特性。 Java8 新特性列表如下:...
摘要:歸約操作計(jì)算有效訂單總金額有效訂單總金額收集數(shù)據(jù)收集將流轉(zhuǎn)換為其他形式,方法作為終端操作,接收一個(gè)接口的實(shí)現(xiàn),用于給中元素做匯總的方法。 接上一篇:《Java8新特性之stream》,下面繼續(xù)接著講Stream 5、流的中間操作 常見(jiàn)的流的中間操作,歸為以下三大類(lèi):篩選和切片流操作、元素映射操作、元素排序操作:showImg(https://segmentfault.com/img/b...
摘要:大家好,我是樂(lè)字節(jié)的小樂(lè)。需要注意的是很多流操作本身就會(huì)返回一個(gè)流,所以多個(gè)操作可以直接連接起來(lái),如下圖這樣,操作可以進(jìn)行鏈?zhǔn)秸{(diào)用,并且并行流還可以實(shí)現(xiàn)數(shù)據(jù)流并行處理操作。為集合創(chuàng)建并行流。 大家好,我是樂(lè)字節(jié)的小樂(lè)。說(shuō)起流,我們會(huì)聯(lián)想到手機(jī)、電腦組裝流水線,物流倉(cāng)庫(kù)商品包裝流水線等等,如果把手機(jī) ,電腦,包裹看做最終結(jié)果的話,那么加工商品前的各種零部件就可以看做數(shù)據(jù)源,而中間一系列的...
閱讀 2767·2021-11-25 09:43
閱讀 2810·2021-11-04 16:09
閱讀 1876·2021-10-12 10:13
閱讀 944·2021-09-29 09:35
閱讀 955·2021-08-03 14:03
閱讀 1865·2019-08-30 15:55
閱讀 3086·2019-08-28 18:14
閱讀 3681·2019-08-26 13:43