0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

java 8的日期用法

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-10-09 15:50 ? 次閱讀

java 已經(jīng)出到 17 了,而小編還在用 8 的版本,在 8 中已經(jīng)推出了新的日期 API,不在使用 。java.time 包下提供了用于日期、時間、實例和周期的主要 API。

獲取今天日期

LocalDate 存儲了日期,如:2022-01-09,它不包含時間。

public static void main(String[] args) {
    LocalDate now = LocalDate.now();
    System.out.println(now);
}

設(shè)置日期

of 方法是一個靜態(tài)方法,接收年、月、日三個 int 參數(shù),返回 LocalDate 對象。需要注意的是月份不是從 0 開始的。

public static void main(String[] args) {
    LocalDate date = LocalDate.of(2022,1,9);
    System.out.println(date);
}

日期判斷

日期操作第一個會想到的就是兩個日期是否相等的操作

public static void main(String[] args) {
    LocalDate date = LocalDate.of(2022,1,10);
    LocalDate today = LocalDate.now();
    if(date.equals(today)) {
        System.out.println("日期相等");
    } else {
        System.out.println("日期不相等");
    }
}

當(dāng)前日期是否早于、晚于另外的日期,使用 isAfter() 和 isBefore() 方法。

public static void main(String[] args) {
    LocalDate today = LocalDate.now();
    LocalDate date = LocalDate.of(2022,1,9);
    if(today.isAfter(date)) {
        System.out.println("今天已經(jīng)晚了");
    } else {
        System.out.println("今天還早");
    }

    if(today.isBefore(date)) {
        System.out.println("今天在前面");
    } else {
        System.out.println("今天在后面");
    }

}

匹配周期性的日期

在某些業(yè)務(wù)中,每年、每月、每周都會有一個特定的日期,比如每個月的賬單日、每年的生日等日期,這時就不能把年、月等放入日期比較??梢允褂?DayOfWeek、MonthDay、YearMonth 類處理這類日期。

public static void main(String[] args) {
    LocalDate date = LocalDate.of(2022,1,9);
    MonthDay monthDay = MonthDay.of(date.getMonth(), date.getDayOfMonth());
    MonthDay today = MonthDay.from(LocalDate.now());
    if(today.equals(monthDay)) {
        System.out.println("今天已經(jīng)到特定的日期了");
    } else {
        System.out.println("今天還沒有到特定的日期");
    }
}

一周、月、年前、后的日期

ChronoUnit 是用來表示時間的單位,比如:ChronoUnit.YEARS 年,ChronoUnit.WEEKS 周。minus()、plus() 方法用來減去、加上一個時間周期。

public static void main(String[] args) {

        LocalDate today = LocalDate.now();
        LocalDate preWeek = today.minus(1, ChronoUnit.WEEKS);
        System.out.println(preWeek);

        LocalDate afterWeek = today.plus(1, ChronoUnit.WEEKS);
        System.out.println(afterWeek);

        LocalDate preMon = today.minus(1, ChronoUnit.MONTHS);
        System.out.println(preMon);

        LocalDate afterMon = today.plus(1, ChronoUnit.MONTHS);
        System.out.println(afterMon);

        LocalDate preYear = today.minus(1, ChronoUnit.YEARS);
        System.out.println(preYear);

        LocalDate afterYear = today.plus(1, ChronoUnit.YEARS);
        System.out.println(afterYear);

    }

日期間隔

計算兩個日期的間隔了多少天、月是一個很常規(guī)的業(yè)務(wù)操作。月是用 Period 類計算,天使用 LocalDate 的 toEpochDay() 方法計算。

public static void main(String[] args) {
    LocalDate today = LocalDate.now();
    LocalDate date = LocalDate.of(2022,4,10);
    Period period = Period.between( date,today);
    System.out.println("間隔了" + period.getMonths() + "月");
    System.out.println("間隔了" + (today.toEpochDay() - date.toEpochDay()) + "天");

}

時間戳

Instant 類有一個靜態(tài)工廠方法now()會返回當(dāng)前的時間戳。

public static void main(String[] args) {
    Instant instant = Instant.now();
    System.out.println(instant);
    System.out.println(instant.toEpochMilli());
}

格式化日期

DateTimeFormatter 是一個線程安全的日期和時間格式化器,下面是用 DateTimeFormatter.BASIC_ISO_DATE 將 20210109 格式化成了 2021-01-09。

public static void main(String[] args) {
    String str = "20210109";
    LocalDate formatted = LocalDate.parse(str, DateTimeFormatter.BASIC_ISO_DATE);
    System.out.println("格式化后的日期為:  "+ formatted);
}

DateTimeFormatter 也可以自定義格式化字符串。

public static void main(String[] args) {
    String str = "09012021";
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMddyyyy");
    LocalDate date = LocalDate.parse(str, formatter);
    System.out.print(date);
}

是否為閏年

小編在學(xué)程序之初被閏年折磨的死去活來,給個年份計算是不是閏年。java 8 的 isLeapYear() 就很好的解決了這個問題。

public static void main(String[] args) {
    LocalDate today = LocalDate.now();
    if(today.isLeapYear()){
        System.out.println("閏年");
    }else {
        System.out.println("不是閏年");
    }

}

日期轉(zhuǎn)字符串

上面格式化的例子是將字符串轉(zhuǎn)為日期,下面是將日期轉(zhuǎn)為字符串。

public static void main(String[] args) {
    LocalDate now = LocalDate.now();
    DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    String str = now.format(format);
    System.out.print(str);
}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2952

    瀏覽量

    104479
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1472

    瀏覽量

    61749
  • 格式化
    +關(guān)注

    關(guān)注

    2

    文章

    38

    瀏覽量

    9101
收藏 人收藏

    評論

    相關(guān)推薦

    Java多線程的用法

    本文將介紹一下Java多線程的用法。 基礎(chǔ)介紹 什么是多線程 指的是在一個進程中同時運行多個線程,每個線程都可以獨立執(zhí)行不同的任務(wù)或操作。 與單線程相比,多線程可以提高程序的并發(fā)性和響應(yīng)
    的頭像 發(fā)表于 09-30 17:07 ?916次閱讀

    常見的幾種日期對象用法

    前言 LocalDateTime、LocalDate、LocalTime 是 Java8 全新的日期框架,加強了對時間的管理,有很多特別好用的時間運算方法,而且是線程安全的,較之
    的頭像 發(fā)表于 09-25 11:10 ?697次閱讀
    常見的幾種<b class='flag-5'>日期</b>對象<b class='flag-5'>用法</b>

    整理一下ElementUI+VUE日期控件禁用用法

    今天給大家整理一下ElementUI+VUE 日期控件禁用用法,希望對大家有所幫助!HTML文件
    發(fā)表于 01-18 09:35

    JAVA教程之時間日期服務(wù)器

    JAVA教程之時間日期服務(wù)器,很好的JAVA的資料,快來學(xué)習(xí)吧
    發(fā)表于 04-11 17:28 ?7次下載

    java并發(fā)編程實戰(zhàn)之輔助類用法

    二.CyclicBarrier用法 三.Semaphore用法 若有不正之處請多多諒解,并歡迎批評指正。 一.CountDownLatch用法 CountDownLatch類位于java
    發(fā)表于 09-27 16:50 ?0次下載

    java8新特性

    java8為接口聲明添加非抽象方法的實現(xiàn),也成為拓展方法。
    發(fā)表于 11-27 15:54 ?1722次閱讀

    java final關(guān)鍵字用法技巧匯總解析

    談到final關(guān)鍵字,想必很多人都不陌生,在使用匿名內(nèi)部類的時候可能會經(jīng)常用到final關(guān)鍵字。另外,Java中的String類就是一個final類,那么今天我們就來了解final這個關(guān)鍵字的用法。
    發(fā)表于 12-01 11:02 ?1105次閱讀
    <b class='flag-5'>java</b> final關(guān)鍵字<b class='flag-5'>用法</b>技巧匯總解析

    Java數(shù)組的常用方法_Java:數(shù)組工具類Arrays類的常用方法的用法及代碼

    本文主要詳細介紹了Java數(shù)組的常用方法以及數(shù)組工具類Arrays類的常用方法的用法及代碼。
    發(fā)表于 01-29 10:25 ?2905次閱讀

    java日期結(jié)果與操作系統(tǒng)時間相差8小時處理解決方法說明

    本文檔的主要內(nèi)容詳細介紹的是java日期結(jié)果與操作系統(tǒng)時間相差8小時處理解決方法說明。最近有遇到java的時間不對的事件,現(xiàn)象:通過java
    發(fā)表于 01-22 11:10 ?8次下載
    <b class='flag-5'>java</b>新<b class='flag-5'>日期</b>結(jié)果與操作系統(tǒng)時間相差<b class='flag-5'>8</b>小時處理解決方法說明

    如何正確區(qū)分Java中super函數(shù)用法

    Java中super函數(shù)有很多方法,在使用的時候我們應(yīng)該如何正確區(qū)分? 2 方法 三種用法: 訪問父類的方法。 調(diào)用父類構(gòu)造方法。 訪問父類中的隱藏成員變量。
    的頭像 發(fā)表于 02-21 15:08 ?537次閱讀

    Java枚舉的特點及用法

    Java 枚舉出現(xiàn)之前,通常會使用常量類來表示一組固定的常量值,直到Java 1.5之后推出了枚舉,那么枚舉類型有哪些特點,它比常量類又好在哪里呢。 本文將分析一下枚舉的特點及用法。 1.
    的頭像 發(fā)表于 09-30 10:02 ?1336次閱讀

    this關(guān)鍵字在Java中的用法

    this 關(guān)鍵字只能在方法內(nèi)部使用,表示對“調(diào)用方法的那個對象”的引用。 其實簡單來說 this 關(guān)鍵字就是表示當(dāng)前對象,下面我們來具體介紹 this 關(guān)鍵字在Java中的用法。 1、調(diào)用成員變量
    的頭像 發(fā)表于 10-10 16:49 ?521次閱讀
    this關(guān)鍵字在<b class='flag-5'>Java</b>中的<b class='flag-5'>用法</b>

    sql中日期函數(shù)的用法

    日期函數(shù)在SQL中是非常重要的功能之一,它們能幫助我們在數(shù)據(jù)庫中存儲和處理日期和時間數(shù)據(jù)。在本文中,我將詳細介紹一些常用的SQL日期函數(shù),包括如何創(chuàng)建日期和時間數(shù)據(jù)、如何格式化和轉(zhuǎn)換
    的頭像 發(fā)表于 11-17 16:24 ?953次閱讀

    java字符串轉(zhuǎn)化為日期格式

    Java中,字符串轉(zhuǎn)化為日期格式是一個常見的需求。日期格式在處理時間相關(guān)的操作時非常重要,它可以用來表示一段時間的開始和結(jié)束,也可以用來計算時間差等。本文將詳細介紹如何將一個字符串轉(zhuǎn)化為日期
    的頭像 發(fā)表于 11-17 16:38 ?2831次閱讀

    java中obj類型的實戰(zhàn)用法

    類型具有許多實戰(zhàn)用法,下面將詳細介紹一些常見的使用場景。 作為方法參數(shù)和返回值的類型 在Java中,可以使用obj類型作為方法的參數(shù)或返回值類型。這種用法可以使方法具有更廣泛的適用性,因為obj類型可以接受任何對象作為參數(shù)或返回
    的頭像 發(fā)表于 11-21 10:27 ?691次閱讀