您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何在java8中使用time包,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
新的設計思路
引入final定義支持時間點不可變和線程安全,長久來的Date的設計一直遭人詬病著;
設計LocalDate、LocalDateTime、LocalTime、instant、Clock、Duration等類,format\zoo\temporal等包規范時間的定義劃分;
時間統一使用 ISO-8601 日歷系統,也就是yyyy-MM-dd'T'HH??ss:SSSZZ格式,輸出2012-04-13T10:53:43:119+08:00樣子,要是用過jota-time包估計你什么都懂了;
規范并提供更加好用的時間操作方法,plus\minus\with\to\get\of\now等方法命名規則;
jdk1.8包目錄簡介:
time:父級基礎包,常用的時間相關類都在這里,如LocalDate\LocalDateTime\Instant等
chrono:日歷系統包,日歷相關的接口(類似Calendar)也包括提供對其他日歷系統的API
format:格式化和解析包,主要類是DateTimeFormatter
temporal:擴展功能包,提供細粒度的時間控制field、unit,如weeks、months、month-of-year等
zone:時區包,時區規則、本地時區等
圍繞常用點和大多數人經常用到做些用例
計算、格式化、字符串轉換這三快可以說是很基礎的功能,大多數人主要圍繞這幾塊進行開發和封裝,基礎掌握后面的高級用法慢慢就可以積累。一般使用都是圍繞time基礎包中LocalDate\LocalDateTime\LocalTime類展開,先介紹一下這幾個類及相關的類。
LocalDate: 一個ISO-8601日歷系統下的data對象,如2007-12-03 LocalDateTime: 一個ISO-8601日歷系統下的data-time對象,如2007-12-03T10:15:30 LocalTime: 一個ISO-8601日歷系統下的time對象,如10:15:30 Instant: 一個瞬時的時間點值對象,從1970-01-01T00:00:00Z點毫秒計算的 Clock: 基于instant生成的時鐘對象,遵守UTC時區規則可以去生成date和time Duration: 一個time范圍值對象,單位也可以是分鐘或小時 Period: 一個date范圍值對象,單位可以是年、月、日,和duration正好是兩個粒度對象 OffsetDateTime: 從UTC/Greenwich格式時間偏移成ISO-8601的date-time對象,如2007-12-03T10:15:30+01:00 OffSetTime: 和OffsetDateTime類似,粒度是到time的UTC時間格式對象,如10:15:30+01:00 ZonedDateTime: 帶時區的ISO-8601日歷系統的date-time對象,如2007-12-03T10:15:30+01:00 Europe/Paris ZonedOffset: 一個帶時區的從Greenwich/UTC的偏移量范圍中對象,如+02:00
網上找的新舊類的比較圖挺好的,貼在這里:
時間加減計算
LocalDateTime dateTime = LocalDateTime.now(Clock.system(ZoneId.systemDefault())); LocalDateTime datetime2 =dateTime.minusDays(2); printTest(dateTime); printTest(datetime2); printTest(datetime2.plusHours(3)); printTest(datetime2.minusWeeks(1)); printTest(datetime2.plus(1,ChronoUnit.MONTHS)); printTest(datetime2.compareTo(dateTime)); printTest(datetime2.withYear(2)); printTest(datetime2.isBefore(dateTime)); Duration duration = Duration.ofDays(5); printTest(duration); printTest(duration.plusHours(2).toMinutes());
結果:
1 : 2019-01-29 11:01:49
2 : 2019-01-27 11:01:49
3 : 2019-01-27 14:01:49
4 : 2019-01-20 11:01:49
5 : 2019-02-27 11:01:49
6 : -2
7 : 0002-01-27 11:01:49
8 : true
9 : PT120H
10 : 7320
時間輸出格式化
LocalDateTime dateTime = LocalDateTime.now(Clock.systemDefaultZone()); printTest(dateTime); printTest(dateTime.format(DateTimeFormatter.BASIC_ISO_DATE)); printTest(dateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); printTest(dateTime.format(DateTimeFormatter.ISO_WEEK_DATE)); printTest(dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH??ss.SSS"))); DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder(); builder.appendPattern("yyyy-MM-dd"); builder.parseStrict().toFormatter(); printTest(dateTime.format(builder.parseStrict().toFormatter()));
結果:
1 : 2019-01-29 11:14:07
2 : 20190129
3 : 2019-01-29T11:14:07.232
4 : 2019-W05-2
5 : 2019-01-29 11:14:07.232
6 : 2019-01-29
時間對象和string相互轉換
LocalDateTime dateTime = LocalDateTime.now(Clock.system(ZoneId.systemDefault())); printTest(dateTime.format(DateTimeFormatter.ISO_LOCAL_DATE)); printTest(dateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); printTest(dateTime.format(DateTimeFormatter.ISO_LOCAL_TIME)); printTest(dateTime.format(DateTimeFormatter.BASIC_ISO_DATE)); printTest(dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH??ss"))); printTest(dateTime.format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT))); printTest(dateTime.format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM))); printTest(dateTime.format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.valueOf("MEDIUM")))); printTest(LocalDateTime.parse("2019-12-03T10:15:30").toString()); printTest(LocalDate.parse("2019-12-03",DateTimeFormatter.ISO_LOCAL_DATE)); printTest(LocalTime.parse("10:15:30",DateTimeFormatter.ISO_LOCAL_TIME));
結果:
1 : 2019-01-29
2 : 2019-01-29T10:35:38.508
3 : 10:35:38.508
4 : 20190129
5 : 2019-01-29 10:35:38
6 : 19-1-29 上午10:35
7 : 2019-1-29 10:35:38
8 : 2019-1-29 10:35:38
9 : 2019-12-03T10:15:30
10 : 2019-12-03
11 : 10:15:30
新API和就Date轉換策略
LocalDateTime localDateTime = LocalDateTime.now(); localDateTime.minusHours(2); printTest(localDateTime); Date localDateTime2 = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); printTest(localDateTime2.toString()); LocalDate localDate = LocalDate.now(); printTest(localDate); Date localDate2 = Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()); printTest(localDate2); Date date = new Date(); printTest(date); LocalDateTime date2 = LocalDateTime.ofInstant(date.toInstant(),ZoneId.systemDefault()); printTest(date2); LocalTime localTime = LocalDateTime.ofInstant(new Date().toInstant(),ZoneId.systemDefault()).toLocalTime(); printTest(localTime);
結果:
1 : 2019-01-29 13:06:58
2 : Tue Jan 29 13:06:58 CST 2019
3 : 2019-01-29
4 : Tue Jan 29 00:00:00 CST 2019
5 : Tue Jan 29 13:06:58 CST 2019
6 : 2019-01-29 13:06:58
7 : 13:06:58.343
關于如何在java8中使用time包就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。