Java8————日期时间 API
生活随笔
收集整理的這篇文章主要介紹了
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兩個特殊枚舉
Month、DayOfWeek
獲取星期
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java环境变量javac不能成功 wi
- 下一篇: java美元兑换,(Java实现) 美元