Java之時間類2(JDK8新增)

一、Date類

(一)、ZoneId:時區
1、概述

????????ZoneId是Java 8中處理時區的類。它用于表示時區標識符,例如“America/New_York”或“Asia/Tokyo”。一共有600個時區。

2、常用方法:
static Set<String> getAvailableZoneIds()獲取Java中支持的所有時區
static ZoneId systemDefault()獲取系統默認時區
static ZoneId of(String zoneId)獲取一個指定的時區
// 獲取Java中支持的所有時區
Set<String> zoneIds = ZoneId.getAvailableZoneIds();
System.out.println(zoneIds);// 獲取系統默認時區
ZoneId zoneId = ZoneId.systemDefault();
System.out.println(zoneId);// 獲取一個指定的時區
ZoneId zoneId1 = ZoneId.of("Asia/Pontianak");
System.out.println(zoneId1);
(二)、Instant:時間戳
1、概述

????????Instant是Java 8中新添加的類,用于表示時間戳。它是一個包含秒數和納秒數的不可變對象,可以精確到納秒級別。

2、常用方法:
static Instant now()獲取當前時間的Instant對象(標準時間)
static Instant ofXXX(long epochMilli)根據(秒/毫秒/納秒)獲取Instant對象
ZoneDateTime atZone(ZoneId zone)指定時區
boolean isXXX(Instant otherInstant)判斷系列的方法
Instant minusXXX(long millisToSubtract)減少時間系列的方法
Instant plusXXX(long millisToSubtract)增加時間系列的方法
// 獲取當前時間的Instant對象(標準時間)
Instant now = Instant.now();
System.out.println(now);// 根據(秒/毫秒/納秒)獲取Instant對象
Instant instant = Instant.ofEpochMilli(0L);
System.out.println(instant);Instant instant1 = Instant.ofEpochSecond(1L);
System.out.println(instant1);Instant instant2 = Instant.ofEpochSecond(1L, 1000000000L);
System.out.println(instant2);// 指定時區
ZonedDateTime zonedDateTime = now.atZone(ZoneId.of("Asia/Shanghai"));
System.out.println(zonedDateTime);// 判斷系列的方法
Instant instant3 = Instant.ofEpochMilli(0L);
Instant instant4 = Instant.ofEpochMilli(1000L);System.out.println(instant3.isBefore(instant4));
System.out.println(instant3.isAfter(instant4));// 減少時間系列的方法
Instant instant5 = Instant.ofEpochMilli(3000L);
System.out.println(instant5);Instant instant6 = instant5.minusSeconds(1);
System.out.println(instant6);// 增加時間系列的方法
Instant instant7 = Instant.ofEpochMilli(0L);
System.out.println(instant7);Instant instant8 = instant7.plusSeconds(10);
System.out.println(instant8);
(三)、ZoneDateTime:帶時區的時間
1、概述

????????ZoneDateTime是Java 8中的日期時間類,表示帶有時區偏移量的日期時間信息。它是LocalDateTime類和ZoneId類的結合,同時包含了時區信息和本地日期時間。它可以用來表示任意時區中的日期時間信息,并且可以方便地進行時區之間的轉換。

2、常用方法:

  1. now():返回當前時區的當前時間。

  2. of():根據指定的年、月、日、小時、分鐘、秒和時區創建一個 ZonedDateTime 對象。

  3. toInstant():將 ZonedDateTime 對象轉換為 Instant 對象,即從時區時間轉為標準時間。

  4. withZoneSameInstant():根據指定時區,將 ZonedDateTime 對象轉換為同一時刻的另一個時區時間。

  5. withZoneSameLocal():根據指定時區,將 ZonedDateTime 對象轉換為同一本地時間的另一個時區時間。

  6. toLocalDateTime():將 ZonedDateTime 對象轉換為 LocalDateTime 對象,即去掉時區信息。

  7. format():格式化 ZonedDateTime 對象為指定格式的時間字符串。

  8. getYear():獲取年份。

  9. getMonth():獲取月份。

  10. getDayOfMonth():獲取日期。

  11. getDayOfWeek():獲取星期幾。

  12. getHour():獲取小時。

  13. getMinute():獲取分鐘。

  14. getSecond():獲取秒數。

  15. getNano():獲取納秒數。

二、日期格式化類

(一)、DateTimeFormatter:用于時間的格式化和解析
1、概述

????????DateTimeFormatter是Java 8中的一個類,用于格式化日期和時間。它可以將日期和時間對象轉換為指定格式的字符串,也可以將字符串轉換為日期和時間對象。

2、常用方法:
static DateTimeFormatter ofPattern(格式)獲取格式對象
String format(時間對象)按照指定方式格式化
// 獲取格式對象
ZonedDateTime zonedDateTime = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));// 解析/格式化器
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss EE a");// 格式化
System.out.println(dateTimeFormatter.format(zonedDateTime));

三、日歷類

(一)、LocalDate:年、月、日? ?
??????????????LocalTime:時、分、秒? ?
??????????????LocalDateTime:年、月、日、時、分、秒
1、概述

????????Java中的LocalDate是一個不可變的日期對象,代表了一個年月日的日期,不包含時間和時區信息。它是Java 8 API中的一部分,位于java.time包中。

????????LocalDate類提供了許多方便的方法來處理日期、時間和時間間隔,例如加減天數、月份、年份、與其他日期比較等。它支持ISO日歷系統(也就是公歷)。

????????LocalTime是Java 8中的時間API中的一種類型。它代表的是一個不帶時區的時間,即僅表示時間部分,如小時、分鐘、秒和毫秒。

????????Java中的LocalDateTime是一個表示日期和時間,但沒有時區偏移的類。它可以用于存儲日期和時間的信息,例如:2021年8月15日下午3點30分。它不包含時區信息,所以它無法表示特定時區的時間。

2、常用方法:
static XXX now()獲取當前時間的對象
static XXX of(...)獲取指定時間的對象
get開頭的方法獲取日歷中的年,月,日,時,分,秒等信息
isBefore,isAfter比較兩個LocalDate
with開頭修改時間
minus開頭減少時間
plus開頭增加時間
public LocalDate toLocalDate()LocalDateTiem轉換成一個LocaDate對象
public LocalTime toLocalTime()LocalDateTiem轉換成一個LocaTime對象
// 只演示LocalDate
// 獲取當前時間的對象
LocalDate date = LocalDate.now();
System.out.println(date); // 2023-12-12// 獲取指定時間的對象
LocalDate localDate = LocalDate.of(2023, 1, 1);
System.out.println(localDate); // 2023-01-01// 獲取日歷中的年,月,日,時,分,秒等信息
int year = localDate.getYear();
System.out.println(year);// 2023// 獲取月
Month m = localDate.getMonth();
System.out.println(m); // JANUARY
System.out.println(m.getValue()); // 1int value = localDate.getMonthValue();
System.out.println(value);// 1// 比較兩個LocalDate
System.out.println(localDate.isBefore(localDate));
System.out.println(localDate.isAfter(localDate));// 修改時間
LocalDate withYear = localDate.withYear(2000);
System.out.println(withYear); // 2000-01-01// 減少時間
LocalDate minusYears = localDate.minusYears(1);
System.out.println(minusYears); // 2022-01-01// 增加時間
LocalDate plusYears = localDate.plusYears(1);
System.out.println(plusYears); // 2024-01-01

四、工具類

(一)、Duration:時間間隔(秒,納秒)
1、概述

Java中的Duration是一個類,用于表示時間段的長度,以時間的標準單位表示,如小時、分鐘、秒、毫秒等。它可以用于計算時間間隔,比較時間間隔的大小,以及在時間上進行加減運算等。

2、常用方法:
  1. ofXXX()方法:根據不同的單位創建Duration對象。
  2. plusXXX()方法和minusXXX()方法:用于添加和減去時間間隔。
  3. toXXX()方法:將Duration對象轉換為指定單位的時間間隔。
  4. compareTo()方法:比較兩個Duration對象的大小。
  5. getXXX()方法:獲取Duration對象的屬性值,例如hours、minutes、seconds等
Duration duration1 = Duration.ofSeconds(60); // 創建一個持續時間為60秒的Duration對象
Duration duration2 = Duration.ofMinutes(5); // 創建一個持續時間為5分鐘的Duration對象Duration duration3 = Duration.ofSeconds(30);
Duration duration4 = duration3.plusSeconds(10); // 將持續時間增加10秒
Duration duration5 = duration3.minusSeconds(10); // 將持續時間減少10秒Duration duration6 = Duration.ofMinutes(5);
long seconds = duration6.toSeconds(); // 將持續時間轉換為秒數Duration duration7 = Duration.ofSeconds(60);
Duration duration8 = Duration.ofMinutes(1);
int result = duration7.compareTo(duration8); // 比較持續時間是否相等Duration duration9 = Duration.ofHours(2);
long hours = duration9.toHours(); // 獲取持續時間的小時數

(二)、Period:時間間隔(年,月,日)
1、概述

????????Java中的Period是表示兩個日期之間的一段時間的類。它包含年、月、日等字段,可以用于計算兩個日期之間的差值,也可以用于將一段時間加到日期上。Period類主要用于處理調整日期的情況,例如加上一個月、減去一年等。

2、常用方法:
  1. ofYears(int years): 創建一個表示指定年數的Period對象。
  2. ofMonths(int months): 創建一個表示指定月數的Period對象。
  3. ofDays(int days): 創建一個表示指定天數的Period對象。
  4. between(LocalDate startDateInclusive, LocalDate endDateExclusive): 創建一個表示兩個日期之間的Period對象。
  5. getYears(), getMonths(), getDays(): 獲取Period對象中的年、月、日等字段的值。
  6. plusYears(long yearsToAdd), plusMonths(long monthsToAdd), plusDays(long daysToAdd): 將指定的年、月、日數加到Period對象上。
  7. minusYears(long yearsToSubtract), minusMonths(long monthsToSubtract), minusDays(long daysToSubtract): 將指定的年、月、日數從Period對象上減去。
// 創建Period對象
Period period = Period.between(LocalDate.of(2019, 1, 1), LocalDate.now());
System.out.println(period.getYears() + " years " + period.getMonths() + " months " + period.getDays() + " days");// 在日期上加上一段時間
LocalDate date = LocalDate.of(2022, 1, 1);
Period nextYear = Period.ofYears(1);
LocalDate nextDate = date.plus(nextYear);
System.out.println("Next year is " + nextDate);

(三)、ChronoUnit:時間間隔(所有單位)
1、概述

????????ChronoUnit是Java 8中java.time包中的一個枚舉類,表示一種時間單位。它提供了一組時間單位常量,用于在LocalDate、LocalTime、LocalDateTime和ZonedDateTime中執行日期或時間計算。

ChronoUnit中的常量包括:

  • NANOS:納秒
  • MICROS:微秒
  • MILLIS:毫秒
  • SECONDS:秒
  • MINUTES:分鐘
  • HOURS:小時
  • HALF_DAYS:半天
  • DAYS:天
  • WEEKS:周
  • MONTHS:月
  • YEARS:年
  • DECADES:十年
  • CENTURIES:世紀
  • MILLENNIA:千年
  • ERAS:時代
2、常用方法:
  1. between方法:計算兩個日期或時間之間的差距,返回值為long類型。
  2. addTo方法:將指定的時間段添加到日期或時間中。
  3. isSupportedBy方法:判斷指定的日期或時間是否支持指定的時間單位。
  4. getDuration方法:獲取指定時間單位的持續時間。
  5. valueOf方法:根據字符串返回對應的ChronoUnit枚舉常量。
LocalDate d1 = LocalDate.of(2022, 1, 1);
LocalDate d2 = LocalDate.of(2022, 1, 10);
long daysBetween = ChronoUnit.DAYS.between(d1, d2);
System.out.println("daysBetween: " + daysBetween); // 輸出:9LocalDate date = LocalDate.of(2022, 1, 1);
LocalDate newDate = date.plus(1, ChronoUnit.WEEKS);
System.out.println("newDate: " + newDate); // 輸出:2022-01-08LocalDate date = LocalDate.of(2022, 1, 1);
boolean isSupported = ChronoUnit.HOURS.isSupportedBy(date);
System.out.println("isSupported: " + isSupported); // 輸出:falseDuration dayDuration = ChronoUnit.DAYS.getDuration();
System.out.println("dayDuration: " + dayDuration); // 輸出:PT24HChronoUnit unit = ChronoUnit.valueOf("MONTHS");
System.out.println("unit: " + unit); // 輸出:MONTHS

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215516.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215516.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215516.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++基礎知識

目錄 前言&#xff1a; 命名空間 命名空間的定義 命名空間的使用 c輸入與輸出 缺省參數 函數重載 引用 引用的特性 常引用 引用的使用場景 引用做參數 引用做返回值 引用與指針的區別 內聯函數 內聯函數的特性 前言&#xff1a; C 語言是結構化和模塊化的語言&…

VS CODE 出錯 XHR failed

重新下載過去的版本&#xff0c;可能由于最近版本更新導致 Visual Studio Code September 2023

談談MYSQL主從復制原理

目錄 概述 要點binlog日志 主從復制過程 總結 概述 MySQL 主從復制是指數據可以從一個MySQL數據庫服務器主節點復制到一個或多個從節點。 MySQL 默認采用異步復制方式。從節點不用一直訪問主服務器來更新自己的數據&#xff0c;數據的更新可以在遠程連接上進行&#xff0…

Volatility3內存取證工具安裝及入門在Linux下的安裝教程

1-1. Volatility3簡介 Volatility 是一個完全開源的工具&#xff0c;用于從內存 (RAM) 樣本中提取數字工件。支持Windows&#xff0c;Linux&#xff0c;MaC&#xff0c;Android等多類型操作系統系統的內存取證。 針對競賽這塊&#xff08;CTF、技能大賽等&#xff09;基本上都…

websocket vue操作

let websocket: WebSocket; /** websocket測試 */ function connectWebsocket() {if (typeof WebSocket "undefined") {console.log("您的瀏覽器不支持WebSocket");return;}// let ip window.location.hostname ":8080";let ip "10.192…

瑞薩RZ/G2L核心板Linux Log目錄文件詳解

為了排除系統問題&#xff0c;監控系統健康狀況以及了解系統與應用程序的交互方式&#xff0c;我們需要了解各log文件的作用&#xff0c;以G2L中yocto文件系統為例&#xff0c;在系統/var/log/目錄下會存放記錄系統中各個部分的log文件作用如下&#xff1a; 1. 文件詳情 下圖…

Ubuntu系統部署Inis博客并使用內網穿透發布到公網隨時隨地遠程訪問

目錄 前言 推薦 1. Inis博客網站搭建 1.1. Inis博客網站下載和安裝 1.2 Inis博客網站測試 1.3 cpolar的安裝和注冊 2. 本地網頁發布 2.1 Cpolar臨時數據隧道 2.2 Cpolar穩定隧道&#xff08;云端設置&#xff09; 2.3.Cpolar穩定隧道&#xff08;本地設置&#xff09;…

鴻蒙原生應用/元服務開發-Stage模型能力接口(二)

ohos.app.ability.AbilityConstant (AbilityConstant)一、說明 AbilityConstant提供Ability相關的枚舉&#xff0c;包括設置初次啟動原因、上次退出原因、遷移結果、窗口類型等。本模塊首批接口從API version 9開始支持。后續版本的新增接口&#xff0c;采用上角標單獨標記接口…

matlab 最小二乘擬合平面(拉格朗日乘子法)

目錄 一、算法原理二、代碼實現三、結果展示本文由CSDN點云俠原創,原文鏈接。博客長期更新,爬蟲自重。 一、算法原理 設擬合出的平面方程為: a x + b y &#

Linux筆記之systemctl命令詳解

Linux筆記之systemctl命令詳解 code review! 文章目錄 Linux筆記之systemctl命令詳解systemctl restart docker 詳解 systemctl 是一個用于管理 systemd 服務的命令行工具。systemd 是一個用于啟動、停止和管理 Linux 系統中的進程的系統和服務管理器。下面是一些常見的 syst…

機器視覺系統選型-條形光源分類及應用場景

標準面光源 從平坦發光面照射漫射光 機械零件尺寸測量電子元件、IC的外形檢測邊緣缺陷檢測服裝紡織、食品包裝檢測 中孔面光源 從相機的同軸方向照射漫射光 金屬零件缺陷檢測金屬外殼檢測大面積電子元件的字符識別 平行面光源 照射平行度較高的漫射光玻璃瓶直徑測量螺釘牙輪…

Android studio 離線配置gradle

Gradle Distributions Gradle Distributions 查看gradle 文件夾下 gradle-wrapper.properties文件中的distributionUrl 版本號 然后在上邊網站下載對應需要的gradle對應版本 下載后復制到 gradle wrapper文件下&#xff0c;同時修改 distributionUrl 指向本地文件 然后同步就…

xtu oj 1233 Cycle Matrix

題目描述 給定N&#xff0c;輸出一個N*N的矩陣&#xff0c;矩陣為N層&#xff0c;每層是一個字符&#xff0c;從A到Z。 比如說N3,矩陣為 CCCCC CBBBC CBABC CBBBC CCCCC輸入 第一行是一個整數K&#xff08;K≤50&#xff09;,表示樣例數。 每個樣例占1行&#xff0c;為一個整…

647.回文子串

給你一個字符串 s &#xff0c;請你統計并返回這個字符串中 回文子串 的數目。 回文字符串 是正著讀和倒過來讀一樣的字符串。 子字符串 是字符串中的由連續字符組成的一個序列。 具有不同開始位置或結束位置的子串&#xff0c;即使是由相同的字符組成&#xff0c;也會被視作…

迷你型洗衣機好用嗎?口碑好的四款小型洗衣機推薦

隨著人們的生活水平的提升&#xff0c;越來越多小伙伴來開始追求更高的生活水平&#xff0c;一些智能化的小家電就被發明出來&#xff0c;而且內衣洗衣機是其中一個。現在通過內衣褲感染到細菌真的是越來越多&#xff0c;所以我們對內衣褲的清洗頻次會高于普通衣服&#xff0c;…

輕量封裝WebGPU渲染系統示例<47>- 多種光源(源碼)

當前示例源碼github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/material/src/voxgpu/sample/MultiLightsShading.ts 當前示例運行效果: 此示例基于此渲染系統實現&#xff0c;當前示例TypeScript源碼如下: export class MultiLightsShading {private mRscene…

STM32 DAC+串口

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、DAC是什么&#xff1f;二、STM32 DAC1.什么型號有DAC2. 簡介3. 主要特點4. DAC框圖5. DAC 電壓范圍和引腳 三、程序步驟總結 前言 提示&#xff1a;這里可…

Runtime

Runtime 概念&#xff1a; Runtime是一套底層純C語言API&#xff0c;OC代碼最終都會被編譯器轉化為運行時代碼&#xff0c;通過消息機制決定函數調用方式&#xff0c;這也是OC作為動態語言使用的基礎。Runtime的最大特征就是實現了OC語言的動態特性。 消息機制原理 在Objec…

代碼隨想錄27期|Python|Day13|棧與隊列|239. 滑動窗口最大值 (一刷至少需要理解思路)|347.前 K 個高頻元素 (一刷至少需要理解思路)

239. 滑動窗口最大值 單調隊列 滑動窗口中的隊列一直保持出口大&#xff0c;入口小的順序。&#xff08;圖&#xff1a;代碼隨想錄&#xff09; 1、每次有新的元素進入&#xff08;也就是滑動窗口移動后&#xff09;&#xff0c;都需要先和入口的元素比較大小&#xff0c;如果…

BDD100K數據集

官網:BDD100K (vis.xyz)????? 論文&#xff1a;[1805.04687] BDD100K: A Diverse Driving Dataset for Heterogeneous Multitask Learning (arxiv.org) github:bdd100k/bdd100k: Toolkit of BDD100K Dataset for Heterogeneous Multitask Learning - CVPR 2020 Oral Pap…