死磕 Java 8 的日期处理
生活随笔
收集整理的這篇文章主要介紹了
死磕 Java 8 的日期处理
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
TIME
- Java 8 推出了全新的日期時間API并且已經(jīng)很久了,因為業(yè)務(wù)中遇到的時間處理的還是不多,因此用的也少,而且大多是用封裝好的時間共計包,就更少接觸java8 的時間類型API了,因此對他不是很熟,今天遇到了一下問題打算總結(jié)一下:
- Java處理日期、日歷和時間的不足之處:將 java.util.Date 設(shè)定為可變類型,以及 SimpleDateFormat 的非線程安全使其應(yīng)用非常受限。然后就在 java8 上面增加新的特性。
- 全新API的好處之一就是,明確了日期時間概念,例如:瞬時(instant)、 長短(duration)、日期、時間、時區(qū)和周期這些概念都是分開的,并且有獨立的對象來處理。
- 重要的是:同時繼承了Joda 庫按人類語言和計算機各自解析的時間處理方式。不同于老版本,新API基于ISO標(biāo)準(zhǔn)日歷系統(tǒng),java.time包下的***所有類都是不可變類型而且線程安全***。
關(guān)鍵類
- Instant:瞬時實例。
- LocalTime:本地時間,不包含日期。只有時分秒納秒等信息
- LocalDate:本地日期,不包含具體時間 例如:2014-01-14 可以用來記錄生日、紀(jì)念日、加盟日等。只有年月日信息
- LocalDateTime:組合了日期和時間,但不包含時差和時區(qū)信息。包含所有年月日時分秒納秒等信息
- 以上三個是類似的PAI,都有差不多一樣的方法和處理方式,只是表達的時間范圍是不一樣的。這一點用起來還是非常方便的
- ZonedDateTime:最完整的日期時間,包含時區(qū)和相對UTC或格林威治的時差。這個類用來處理帶時區(qū)的時間信息
- 新API還引入了 ZoneOffSet 和 ZoneId 類,使得解決時區(qū)問題更為簡便。解析、格式化時間的 DateTimeFormatter 類也全部重新設(shè)計。具體時區(qū)用這兩個處理
當(dāng)前時間
/*** java時間類型,新舊api對比*/public static void getCurrentDate() {LocalDate today = LocalDate.now();System.out.println("today's local date: " + today);Date date = new Date();System.out.println("today's date is: " + date);}獲取對應(yīng)時間年月日,時分秒
/*** LocalDate 獲取年月日信息,與之前Calendar對比*/public static void getDetailDate() {LocalTime todayTime = LocalTime.now();int second = todayTime.getSecond();int minute = todayTime.getMinute();int hour = todayTime.getHour();int nano = todayTime.getNano();System.out.println("秒: " + second + "分: " + minute + "時: " + hour + "納秒: " + nano);LocalDate today = LocalDate.now();int year = today.getYear();int month = today.getMonthValue();int day = today.getDayOfMonth();int day_year = today.getDayOfYear();System.out.println(year + ": " + month + ": " + day + ": " + day_year);LocalDateTime localDateTime = LocalDateTime.now();System.out.println(localDateTime.getHour());}處理特定日志 & 時間對比
/*** 處理特定日志 & 時間對比*/public static void handleSpecilDate() {LocalDate localDate = LocalDate.of(2021, 11, 18);System.out.println(localDate);LocalDate date = LocalDate.of(2021, 6, 18);System.out.println(localDate.equals(date));}處理生日這種周期性時間
/*** 檢查生日這種周期性時間*/public static void cycleDate() {LocalDate localDate = LocalDate.now();LocalDate dateofBirth = LocalDate.of(2021, 6, 18);MonthDay birthday = MonthDay.of(dateofBirth.getMonth(), dateofBirth.getDayOfMonth());MonthDay nowDate = MonthDay.from(localDate);MonthDay monthParse = MonthDay.parse("2021-06-18", DateTimeFormatter.ofPattern("yyyy-MM-dd"));System.out.println(birthday.equals(nowDate));System.out.println(monthParse);}yearMonth處理固定日期
public static void checkCardExpiry() {YearMonth currenctYearMonth = YearMonth.now();System.out.println(currenctYearMonth + ": " + currenctYearMonth.lengthOfMonth());YearMonth credtCard = YearMonth.of(2021, Month.FEBRUARY);System.out.println(credtCard + ": " + credtCard.lengthOfMonth());DayOfWeek dayOfWeek = DayOfWeek.of(3);System.out.println(dayOfWeek);}時間做加法
/*** 時間做加法* LocalTime支持:* NANOS* MICROS* MILLIS* SECONDS* MINUTES* HOURS* HALF_DAYS*/public static void plusHours() {LocalTime localTime = LocalTime.now();localTime.plusHours(5);System.out.println(localTime);LocalTime nextWeek = localTime.plus(10, ChronoUnit.HOURS);System.out.println(nextWeek);System.out.println(localTime);LocalTime halfDay = localTime.plus(2, ChronoUnit.HALF_DAYS);System.out.println(halfDay);}/*** 日期做加法*/public static void plusDate() {LocalDate localDate = LocalDate.now();LocalDate tomorrow = localDate.plus(1, ChronoUnit.DAYS);System.out.println(tomorrow);LocalDate nextYear = localDate.plus(1, ChronoUnit.YEARS);LocalDate beforeYear = localDate.minus(1, ChronoUnit.YEARS);System.out.println("nextYear: " + nextYear);System.out.println("beforeYear: " + beforeYear);}/*** 日期+ 時間,*/public static void plusTime() {LocalDateTime localDateTime = LocalDateTime.now();System.out.println(localDateTime);LocalDateTime afterHour = localDateTime.plus(1, ChronoUnit.HOURS).plus(1, ChronoUnit.MINUTES).plus(1, ChronoUnit.YEARS);System.out.println(afterHour);LocalDateTime nowDate = LocalDateTime.of(2021, 6, 19, 17, 23, 57);System.out.println(nowDate);}時間比較
/*** 時間比較api*/public static void checkTimes() {LocalDateTime localDateTime = LocalDateTime.now();LocalDateTime afterDate = LocalDateTime.of(2021, 6, 19, 17, 23, 57);System.out.println(localDateTime.isBefore(afterDate));System.out.println(localDateTime.isAfter(afterDate));}時區(qū)處理
/*** 時區(qū)處理*/public static void zoneTime() {ZoneId america = ZoneId.of("America/Chicago");LocalDateTime dateAndTime = LocalDateTime.now();ZonedDateTime dateTimeInChicago = ZonedDateTime.of(dateAndTime, america);System.out.println(dateTimeInChicago);ZonedDateTime dateTimeInShenZhen = ZonedDateTime.ofInstant(Instant.now(), ZoneId.systemDefault());System.out.println(dateTimeInShenZhen);}/*** 包括時差信息的日期與時間*/public static void zoneOffSet() {LocalDateTime localDateTime = LocalDateTime.of(2021, Month.FEBRUARY, 14, 19, 24);ZoneOffset offset = ZoneOffset.of("+07:30");OffsetDateTime dateTime = OffsetDateTime.of(localDateTime, offset);System.out.println(dateTime);}檢查閏年
/*** 檢查閏年*/ public static void isLeapYear() {LocalDate today = LocalDate.now();System.out.println(today.getYear() + "年是閏年:" + today.isLeapYear());}計算日期間隔
*** 計算日期之間年,月,天數(shù)*/public static void calcDate() {LocalDate localDateTime = LocalDate.of(2021, 10, 28);LocalDate beforeDateTime = LocalDate.now().plus(3, ChronoUnit.DAYS);Period period = Period.between(localDateTime, beforeDateTime);System.out.println("year: " + period.getYears() + " month:" + period.getMonths() + " day:" + period.getDays());}日期格式
/*** 格式化日期*/public static void formatDate() {String dayAfterTomorrow = "2021-06-18 15:53:06";DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");LocalDateTime formatDateTime = LocalDateTime.parse(dayAfterTomorrow, df);System.out.println("timeStr: " + dayAfterTomorrow + " dateTime:" + formatDateTime);String dayDate = "20210618";DateTimeFormatter dateDayFor = DateTimeFormatter.ofPattern("yyyyMMdd");LocalDate localDate = LocalDate.parse(dayDate, dateDayFor);System.out.println("timeStr: " + dayDate + " dateTime:" + localDate);String dayTime = "160451";DateTimeFormatter dayTimeFor = DateTimeFormatter.ofPattern("HHmmss");LocalTime localTime = LocalTime.parse(dayTime, dayTimeFor);System.out.println("timeStr: " + dayTime + " dateTime:" + localTime);}總結(jié)
以上是生活随笔為你收集整理的死磕 Java 8 的日期处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: md文件丢失云骑士数据恢复软件怎么找回
- 下一篇: 怀孕妇可以吃阿胶吗