日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java8————日期时间 API

發布時間:2025/3/12 java 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java8————日期时间 API 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言

Java 1.0 中引入了 Date 類,Java 1.1 中引入了 Calendar ,Java 8 中引入了java.time API ,這是 Java 非常吸引人的一次對時間日期的升級。它修正了過去的缺陷,同時也清晰易用。在 Java 8 引入time api 中,Instant 代表時間線上的一個點

三個時間類

LocalDate、LocalTime、LocalDateTime

第一個只負責日期相關的處理,第二個負責時間相關的處理,第三個日期時間一起處理,其本質是前兩者操作的再封裝。

獲取當前時間

LocalDateTime now = LocalDateTime.now(); //output : 2018-09-04T14:16:05.323

獲取自定義時間

指定字符串:

LocalDateTime nationalDay = LocalDateTime.of(2018, Month.OCTOBER, 1, 14, 30); // output : 2018-10-01T14:30

指定數字:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime someDay = LocalDateTime.parse("2018-10-01 14:30:30", formatter); // output : 2018-10-01T14:30:30

日期時間格式化

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String nowStr = now.format(formatter); // output : 2018-09-04 14:37:32

注意,Java 8 有一個 BUG ,當日期字符串中帶有毫秒值,無法成功格式化,是會拋出解析異常:

Exception in thread "main" java.time.format.DateTimeParseException: Text '20191120100921234' could not be parsed at index 0at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)at java.time.LocalDateTime.parse(LocalDateTime.java:492)at com.ykt.ffan.common.utils.DateUtilPlus.main(DateUtilPlus.java:161)

官方解釋說 Java9 已經解決了這個問題,但是Java8 的用戶不可能通過升級JDK 來處理線上問題,那么這里貼出我本人的兼容方案:

if (format.contains("SSS")) {try {DateFormat df = new SimpleDateFormat(format);Instant instant = df.parse(dateStr).toInstant();return instant.atZone(ZoneId.systemDefault()).toLocalDateTime();} catch (ParseException e) {e.printStackTrace();} }

?日期比較大小

// LocalDateTime.now() == 2018-09-04 14:42:59 boolean nowIsBefore = LocalDateTime.now().isBefore(nationalDay);// nationalDay == 2018-10-01T14:30:30 // output : true boolean nowIsAfter = LocalDateTime.now().isAfter(nationalDay);// nationalDay == 2018-10-01T14:30:30 // output : false

日期相差多少年 | 月 | 天 | 小時 | 分鐘 | 秒

// now = 2018-09-04T14:50:34.857 ; nationalDay == 2018-10-01T14:30:30 long diffYears = ChronoUnit.YEARS.between(LocalDateTime.now(), nationalDay); // output : 0 long diffMonths = ChronoUnit.MONTHS.between(LocalDateTime.now(), nationalDay); // output : 0 long diffDays = ChronoUnit.DAYS.between(LocalDateTime.now(), nationalDay); // output : 26 long diffHours = ChronoUnit.HOURS.between(LocalDateTime.now(), nationalDay); // output : 647 long diffMins = ChronoUnit.MINUTES.between(LocalDateTime.now(), nationalDay); // output :38859 long diffSecs = ChronoUnit.SECONDS.between(LocalDateTime.now(), nationalDay); // output : 2331188

獲取分鐘

最簡單

int mins2 = LocalDateTime.now().getMinute(); // output : 26

最萬能?(用于非默認語義,如天的分鐘數)

long mins = LocalDateTime.now().getLong(ChronoField.MINUTE_OF_HOUR); // output : 26 long mins = LocalDateTime.now().getLong(ChronoField.MINUTE_OF_DAY); // output : 926

兩個特殊枚舉

MonthDayOfWeek

獲取星期

LocalDateTime sunDay = LocalDateTime.of(2018, 9, 2, 0, 0);DayOfWeek dayOfWeek = sunDay.getDayOfWeek(); // output : SUNDAY int dayOfWeek = sunDay.getDayOfWeek().getValue(); // output : 7

獲取月份

Month month = LocalDateTime.now().getMonth(); // output : SEPTEMBER int month = LocalDateTime.now().getMonth().getValue(); // output : 9

獲取年份

int year = LocalDateTime.now().getYear(); // output : 2018 Year year = Year.now(); // output : 2018

?

總結

以上是生活随笔為你收集整理的Java8————日期时间 API的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。