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

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

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

java 8的日期用法

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

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

獲取今天日期

LocalDate 存儲(chǔ)了日期,如:2022-01-09,它不包含時(shí)間。

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

設(shè)置日期

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

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

日期判斷

日期操作第一個(gè)會(huì)想到的就是兩個(gè)日期是否相等的操作

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ù)中,每年、每月、每周都會(huì)有一個(gè)特定的日期,比如每個(gè)月的賬單日、每年的生日等日期,這時(shí)就不能把年、月等放入日期比較??梢允褂?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("今天還沒(méi)有到特定的日期");
    }
}

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

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

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);

    }

日期間隔

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

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()) + "天");

}

時(shí)間戳

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

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

格式化日期

DateTimeFormatter 是一個(gè)線程安全的日期和時(shí)間格式化器,下面是用 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é)程序之初被閏年折磨的死去活來(lái),給個(gè)年份計(jì)算是不是閏年。java 8 的 isLeapYear() 就很好的解決了這個(gè)問(wèn)題。

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

    關(guān)注

    19

    文章

    2948

    瀏覽量

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

    關(guān)注

    2

    文章

    1468

    瀏覽量

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

    關(guān)注

    2

    文章

    38

    瀏覽量

    9100
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Java多線程的用法

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

    常見(jiàn)的幾種日期對(duì)象用法

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

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

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

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

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

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

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

    java8新特性

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

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

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

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

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

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

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

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

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

    Java枚舉的特點(diǎn)及用法

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

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

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

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

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

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

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

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

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