Java8日期時間(LocalDate、LocalTime、LocalDateTime)

来源:https://www.cnblogs.com/zhangzhixi/archive/2022/07/07/16455137.html
-Advertisement-
Play Games

在看題的時候發現了Java8中新加入的日期時間類,覺得這個小哥寫的不錯,自己也跟著練習下。原文地址:https://blog.csdn.net/yy139926/article/details/124298574 前言: Java中1.8之前有date類,date類到了1.8大部分的方法被棄而且da ...


在看題的時候發現了Java8中新加入的日期時間類,覺得這個小哥寫的不錯,自己也跟著練習下。原文地址:https://blog.csdn.net/yy139926/article/details/124298574

前言:

Java中1.8之前有date類,date類到了1.8大部分的方法被棄而且date類如果不格式化可讀性十分差,而simpledateformat方法中format和parse方法都是線程不安全的。Java1.8之後出現了localdate,localdatetime,localtime這些類,而這些類使用了final來修飾,使得這些類是不可變的,一旦實例化,值就固定了,有點類似於String類,所以這些類都是線程安全的。

一、LocalDate:年月日

LocalDate類的實例是一個不可變對象,它只提供了簡單的日期,並不含當天的時間信息,這個類是不可變的和線程安全的。

方法描述
now 根據當前時間創建LocalDate對象
of 根據指定年月日創建LocalDate對象
getYear 獲得年份
getMonthValue 獲得月份
getMonth 獲得月份枚舉值
getDayOfMonth 獲得月份天數(1-31)
getDayOfWeek 獲得星期幾
getDayOfYear 獲得年份中的第幾天(1-366)
lengthOfYear 獲得當年總天數
lengthOfMonth 獲得當月總天數
toEpochDay 與時間紀元(1970年1月1日)相差的天數
plusDays 加天
plusWeeks 加周
plusMonths 加月
plusYears 加年
minusDays 減年
minusWeeks 減周
minusMonths 減月
minusYears 減年
withYear 替換年份
withYear 替換年份
withDayOfMonth 替換日期
withDayOfYear 替換日期
isBefore 是否日期在之前
isAfter 是否日期在之後
isEqual 是否是當前日期
isleapYear 是否是閏年

1.1、LocalDate常用API

//A.獲取
//(1)獲取當前日期 2022-07-07
System.out.println(LocalDate.now());
//(2)獲取指定日期 2000-03-05
System.out.println(LocalDate.of(2014, 3, 5));
//(3)獲取日期的年份 2022
System.out.println(LocalDate.now().getYear());
//(4)獲取日期的月份 7
System.out.println(LocalDate.now().getMonthValue());
//(5)獲取日期的日子 7
System.out.println(LocalDate.now().getDayOfMonth());
//(6)獲取日期的星期 THURSDAY
System.out.println(LocalDate.now().getDayOfWeek());
//(7)當天所在這一年的第幾天 188
System.out.println(LocalDate.now().getDayOfYear());
//(8)獲取當年天數 365
System.out.println(LocalDate.now().lengthOfYear());
//(9)獲取當月天數 31
System.out.println(LocalDate.now().lengthOfMonth());
//(10)與時間紀元(1970年1月1日)相差的天數,負數表示在時間紀元之前多少天 19180
System.out.println(LocalDate.now().toEpochDay());
//B.運算
//(1)加一天
System.out.println("加1天:" + LocalDate.now().plusDays(1));
//(2)加一周
System.out.println("加1周:" + LocalDate.now().plusWeeks(1));
//(3)加一月
System.out.println("加1月:" + LocalDate.now().plusMonths(1));
//(4)加一年
System.out.println("加1年:" + LocalDate.now().plusYears(1));
//(5)減一天
System.out.println("減1天:" + LocalDate.now().minusDays(1));
//(6)減一周
System.out.println("減1周:" + LocalDate.now().minusWeeks(1));
//(7)減一月
System.out.println("減1月:" + LocalDate.now().minusMonths(1));
//(8)減一年
System.out.println("減1年:" + LocalDate.now().minusYears(1));
//C.替換
//(1)替換年份:2000-07-07
System.out.println("替換年份為2000:" + LocalDate.now().withYear(2000));
//(2)替換月份:2020-01-07
System.out.println("替換月份為1:" + LocalDate.now().withMonth(1));
//(3)替換日子:2020-07-01
System.out.println("替換日期為1:" + LocalDate.now().withDayOfMonth(1));
//(4)替換天數:一年中的第多少天
System.out.println("替換天數為1:" + LocalDate.now().withDayOfYear(1));
//D.比較
//(1)是否在當天之前
System.out.println("是否在當天之前:" + LocalDate.now().minusDays(1).isBefore(LocalDate.now()));
//(2)是否在當天之後
System.out.println("是否在當天之後:" + LocalDate.now().plusDays(1).isAfter(LocalDate.now()));
//(3)是否在當天
System.out.println("是否在當天:" + LocalDate.now().isEqual(LocalDate.now()));
//(4)是否是閏年
System.out.println("今年是否是閏年:" + LocalDate.now().isLeapYear());

1.2、LocalDate 與 String 之間的轉換

//(1)從文本字元串獲取LocalDate實例
LocalDate localdate = LocalDate.parse("2022-04-21");
System.out.println(localdate);
//(2)使用特定格式化形式從文本字元串獲取LocalDate實例
String str = "2019-03-03";
DateTimeFormatter fmt1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date = LocalDate.parse(str, fmt1);
System.out.println(date);
//(3)使用特定格式化形式將LocalDate轉為字元串
LocalDate today = LocalDate.now();
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy/MM/dd");
String dateStr = today.format(fmt);
System.out.println(dateStr);

1.3、LocalDate 與 Date之間的轉換

//(1)LocalDate轉化為Date
ZonedDateTime zonedDateTime = LocalDate.now().atStartOfDay(ZoneId.systemDefault());
Date date = Date.from(zonedDateTime.toInstant());
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(date));
//(2)Date轉化為LocalDate
LocalDate localDate = new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
System.out.println(localDate.format(DateTimeFormatter.ISO_LOCAL_DATE));

二、LocalTime:時分秒

方法描述
static LocalTime now() 獲取預設時區的當前時間
static LocalTime now(ZoneId zone) 獲取指定時區的當前時間
static LocalTime now(Clock clock) 從指定時鐘獲取當前時間
of 根據指定的時、分、秒獲取LocalTime 實例
getHour 獲取小時欄位
getMinute 獲取分鐘欄位
getSecond 獲取秒欄位
getNano 獲取納秒欄位
plusHours 增加小時數
plusMinutes 增加分鐘數
plusSeconds 增加秒數
plusNanos 增迦納秒數
minusHours 減少小時數
minusMinutes 減少分鐘數
minusSeconds 減少秒數
minusNanos 減少納秒數
compareTo 時間與另一個時間比較
isAfter 檢查時間是否在指定時間之後
isBefore 檢查時間是否在指定時間之前

2.1、LocalTime常用API

//A.獲取
//(1)獲取預設時區的當前時間 14:11:31.294
System.out.println(LocalTime.now());
//(2)獲取指定時區的當前時間 14:11:31.392
System.out.println(LocalTime.now(ZoneId.of("Asia/Shanghai")));
//(3)從指定時鐘獲取當前時間 14:11:31.392
System.out.println(LocalTime.now(Clock.systemDefaultZone()));
//(4)指定獲取時分秒
System.out.println(LocalTime.of(12, 30, 30));
//(5)指定獲取時分
System.out.println(LocalTime.of(12, 30));
//(6)指定獲取時分秒納秒
System.out.println(LocalTime.of(12, 30, 30, 123));
//(7)獲取小時欄位
System.out.println("時: " + LocalTime.now().getHour());
//(8)獲取分鐘欄位
System.out.println("分: " + LocalTime.now().getMinute());
//(9)獲取秒欄位
System.out.println("秒: " + LocalTime.now().getSecond());
//(10)獲取納秒欄位
System.out.println("納秒: " + LocalTime.now().getNano());
//B.計算
//(1)增加一小時
System.out.println("增加1小時: " + LocalTime.now().plusHours(1));
//(2)增加三十分鐘
System.out.println("增加30分鐘: " + LocalTime.now().plusMinutes(30));
//(3)增加三十秒
System.out.println("增加30秒: " + LocalTime.now().plusSeconds(30));
//(4)增加一萬納秒
System.out.println("增加10000納秒:" + LocalTime.now().plusNanos(10000));
//(5)減少一小時
System.out.println("減少1小時: " + LocalTime.now().minusHours(1));
//(6)減少三十分鐘
System.out.println("減少30分鐘: " + LocalTime.now().minusMinutes(30));
//(7)減少三十秒
System.out.println("減少30秒: " + LocalTime.now().minusSeconds(30));
//(8)減少一萬納秒
System.out.println("減少10000納秒:" + LocalTime.now().minusNanos(10000));
//C.比較
//(1)時間與另一個時間比較 0(相等)正數(大)負數(小)
System.out.println(LocalTime.now().compareTo(LocalTime.now()));
//(2)檢查時間是否在指定時間之後
System.out.println(LocalTime.now().isAfter(LocalTime.now()));
//(3)檢查時間是否在指定時間之前
System.out.println(LocalTime.now().isBefore(LocalTime.now()));

2.2、LocalTime與 String 之間的轉換

//(1)從文本字元串獲取LocalTime實例
LocalTime localTime1 = LocalTime.parse("12:30:30");
System.out.println(localTime1);
//(2)使用特定格式化形式從文本字元串獲取LocalTime實例
LocalTime localTime2 = LocalTime.parse("12:30:30", DateTimeFormatter.ofPattern("HH:mm:ss"));
System.out.println(localTime2);
//(3)使用特定格式化形式將LocalTime轉為字元串
DateTimeFormatter df1 = DateTimeFormatter.ofPattern("HH:mm:ss");
LocalTime localTime3 = LocalTime.now();
System.out.println(localTime3.format(df1));

三、LocalDateTime:年月日時分秒

方法描述
static LocalDateTime now() 獲取預設時區的當前日期時間
static LocalDateTime now(Clock clock) 從指定時鐘獲取當前日期時間
static LocalDateTime now(ZoneId zone) 獲取指定時區的當前日期時間
static LocalDateTime of(LocalDate date, LocalTime time) 根據日期和時間對象獲取LocalDateTime 實例
static LocalDateTime of(int year, Month month, int dayOfMonth, int hour, int minute, int second) second) 根據指定的年、月、日、時、分、秒獲取LocalDateTime 實例
getYear 獲取年份
getMonth 使用月份枚舉類獲取月份
getDayOfMonth 獲取日期在該月是第幾天
getDayOfWeek 獲取日期是星期幾
getDayOfYear 獲取日期在該年是第幾天
getHour 獲取小時
getMinute 獲取分鐘
getSecond 獲取秒
getNano 獲取納秒
plusYears 增加年
plusMonths 增加月
plusWeeks 增加周
plusDays 增加天
plusHours 增加小時
plusMinutes 增加分
plusSeconds 增加秒
plusNanos 增迦納秒
minusYears 減少年
minusMonths 減少月
meminusWeeks 減少周
minusDays 減少天
minusHours 減少小時
minusMinutes 減少分
minusSeconds 減少秒
minusNanos 減少納秒
isEqual 判斷日期時間是否相等
isBefore 檢查是否在指定日期時間之前
isAfter 檢查是否在指定日期時間之後

3.1、LocalDateTime常用API

//A.獲取
//(1)獲取預設時區的當前日期時間
System.out.println(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
//(2)獲取指定時區的當前日期時間
System.out.println(LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
//(3)從指定時鐘獲取當前日期時間
System.out.println(LocalDateTime.now(Clock.systemDefaultZone()));
//(4)根據日期和時間對象獲取LocalDateTime實例
System.out.println(LocalDateTime.of(LocalDate.now(), LocalTime.now()));
//(5)根據指定的年、月、日、時、分、秒獲取LocalDateTime實例
System.out.println(LocalDateTime.of(2019, 12, 7, 21, 48, 50));
//(6)獲取年份
System.out.println("年 : " + LocalDateTime.now().getYear());
//(7)使用月份枚舉類獲取月份
System.out.println("月(英文) : " + LocalDateTime.now().getMonth());
//(8) 使用月份數字類獲取月份
System.out.println(" 月(數字英文): " + LocalDateTime.now().getMonth().getValue());
//(9)獲取日期在該月是第幾天
System.out.println("天 : " + LocalDateTime.now().getDayOfMonth());
//(10)獲取日期是星期幾(英文)
System.out.println("星期幾(英文) : " + LocalDateTime.now().getDayOfWeek());
//(11)獲取日期是星期幾(數字英文)
System.out.println("星期幾(數字英文) : " + LocalDateTime.now().getDayOfWeek().getValue());
//(12)獲取日期在該年是第幾天
System.out.println("本年的第幾天 : " + LocalDateTime.now().getDayOfYear());
//(13)獲取小時
System.out.println("時: " + LocalDateTime.now().getHour());
//(14)獲取分鐘
System.out.println("分: " + LocalDateTime.now().getMinute());
//(15)獲取秒
System.out.println("秒: " + LocalDateTime.now().getSecond());
//(16)獲取納秒
System.out.println("納秒: " + LocalDateTime.now().getNano());
//B.計算
//(1)增加天數
System.out.println("增加天數 : " + LocalDateTime.now().plusDays(1));
//(2)增加周數
System.out.println("增加周數 : " + LocalDateTime.now().plusWeeks(1));
//(3)增加月數
System.out.println("增加月數 : " + LocalDateTime.now().plusMonths(1));
//(4)增加年數
System.out.println("增加年數 : " + LocalDateTime.now().plusYears(1));
//(5)減少天數
System.out.println("減少天數 : " + LocalDateTime.now().minusDays(1));
//(6)減少月數
System.out.println("減少月數 : " + LocalDateTime.now().minusMonths(1));
//(7)減少周數
System.out.println("減少周數 : " + LocalDateTime.now().minusWeeks(1));
//(8)減少年數
System.out.println("減少年數 : " + LocalDateTime.now().minusYears(1));
//(9)增加小時
System.out.println("增加1小時: " + LocalDateTime.now().plusHours(1));
//(10)增加分鐘
System.out.println("增加30分鐘: " + LocalDateTime.now().plusMinutes(30));
//(11)增加秒數
System.out.println("增加30秒: " + LocalDateTime.now().plusSeconds(30));
//(12)增迦納秒
System.out.println("增加10000納秒:" + LocalDateTime.now().plusNanos(10000));
//(13)減少小時
System.out.println("減少1小時:" + LocalDateTime.now().minusHours(1));
//(14)減少分鐘
System.out.println("減少30分鐘:" + LocalDateTime.now().minusMinutes(30));
//(15)減少秒數
System.out.println("減少30秒: " + LocalDateTime.now().minusSeconds(30));
//(16)減少納秒
System.out.println("減少10000納秒:" + LocalDateTime.now().minusNanos(10000));
//C.比較
//(1)判斷日期時間是否相等
System.out.println(LocalDateTime.now().isEqual(LocalDateTime.now()));
//(2)檢查是否在指定日期時間之前
System.out.println(LocalDateTime.now().isBefore(LocalDateTime.now()));
//(3)檢查是否在指定日期時間之後
System.out.println(LocalDateTime.now().isAfter(LocalDateTime.now()));

3.2、LocalDateTime與 String 之間的轉換

//(1)獲取日期部分
System.out.println(LocalDateTime.now().toLocalDate());
//(2)獲取時間部分:時、分、秒
System.out.println(LocalDateTime.now().toLocalTime().format(DateTimeFormatter.ofPattern("HH:mm:ss")));
//(3)從文本字元串獲取LocalDateTime實例
LocalDateTime ldt2 = LocalDateTime.parse("2019-12-07T21:20:06.303995200");
System.out.println(ldt2.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
//(4)使用特定格式化形式從文本字元串獲取LocalDateTime實例
DateTimeFormatter df1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime ldt3 = LocalDateTime.parse("2019-12-07 21:20:06", df1);
System.out.println(ldt3);
//(5)使用特定格式化形式將LocalDateTime轉為字元串
String ldt4 = df1.format(ldt3);
System.out.println(ldt4);

3.3、LocalDateTime與 Date之間的轉換

//(1)LocalDateTime轉化為Date
ZonedDateTime zdt = LocalDateTime.now().atZone(ZoneId.systemDefault());
Date date1 = Date.from(zdt.toInstant());
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date1));
//(2)Date轉化為LocalDateTime
LocalDateTime localDateTime = new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
System.out.println(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 工作中,經常遇到這樣的問題,我明明在MySQL表上面加了索引,為什麼執行SQL查詢的時候卻沒有用到索引? 同一條SQL有時候查詢用到了索引,有時候卻沒用到索引,這是咋回事? 原因可能是索引失效了,失效的原因有以下幾種,看你有沒有踩過類似的坑? ...
  • ReentrantLock 0 關於ReentrantLock的文章其實寫過的,但當時寫的感覺不是太好,就給刪了,那為啥又要再寫一遍呢 最近閑著沒事想自己寫個鎖,然後整了幾天出來後不是跑丟線程就是和沒加鎖一樣,而且五六段就一個cas性能很差,感覺離大師寫的差十萬八千里 於是!我就想重新研究研究看看大 ...
  • 遞歸 遞歸就是自己調用自己! 遞歸的意思就是不停的調用自己,但是我們要知道的是我們的電腦資源是有限的,一般來說遞歸的層數不能太深。 遞歸主要包含兩個部分:遞歸頭和遞歸體 遞歸頭:什麼時候不調用自身方法。如果沒有,將陷入死迴圈。 遞歸體:什麼時候需要調用自身方法。 舉個例子: 我們用階乘來測試一下遞 ...
  • package cn.daheww.demo.juc.reentrylock; import sun.misc.Unsafe; import java.lang.reflect.Field; import java.util.concurrent.locks.LockSupport; /** * @ ...
  • 開始之前,pandas中DataFrame刪除對象可能存在幾種情況 1、刪除具體列 2、刪除具體行 3、刪除包含某些數值的行或者列 4、刪除包含某些字元、文字的行或者列 本文就針對這四種情況探討一下如何操作。 數據準備 模擬了一份股票交割的記錄。 In [1]: import pandas as p ...
  • 大家好,我是棧長。 大家都知道,程式員這個職業需要不斷總結,對我印象最深的一件事是,我曾經花了幾天時間解決了一個驚天 bug,而幾個月過後,這個 bug 再次發生了,我知道我之前解決過這個 bug,但再次發生時卻束手無策,怎麼想也想不出當時是怎麼解決的。。 相信大家都有遇到過這樣的場景吧? 所以,自 ...
  • 前言 嗨嘍,大家好呀~這裡是愛看美女的茜茜吶 一周工作,忙忙碌碌,身心疲憊,一到周末,倒頭大睡,懶得做飯,點個外賣。 今天我們要採集的網站呢,是國內知名的網上訂餐平臺~ 我做的是採集商家商品數據信息,你也可以採集另外數據哦~ 準備工作 下麵的儘量跟我保持一致哦~不然有可能會發生報錯 💕 環境使用: ...
  • public static void main(String[] args) { ListFor(2); } public static void ListFor(int a){ //測試list集合遍歷(直接有四種遍歷方式) final ArrayList<Integer> integers = ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...