Java時間與日期常用方法

Date

Date date = new Date(); //獲取當前時間? ? ? ??

System.out.println(date.getYear() + 1900); // 必須加上1900 ? ? ? ? System.out.println(date.getMonth() + 1); // 0~11,必須加上1 ? ? ? ? System.out.println(date.getDate()); // 1~31,不能加1


Calendar

可以用于獲取并設置年、月、日、時、分、秒,它和Date比,主要多了一個可以做簡單的日期和時間運算的功能。

?// 獲取當前時間: ? ? ? ?

Calendar c = Calendar.getInstance(); ? ? ? ?

int y = c.get(Calendar.YEAR); ? ? ? ? i

nt m = 1 + c.get(Calendar.MONTH); ? ? ?

int d = c.get(Calendar.DAY_OF_MONTH);? ? ? ? ?

int w = c.get(Calendar.DAY_OF_WEEK); ? ? ? ?

int hh = c.get(Calendar.HOUR_OF_DAY); ? ? ? ?

int mm = c.get(Calendar.MINUTE); ? ? ? ?

int ss = c.get(Calendar.SECOND); ? ? ? ?

int ms = c.get(Calendar.MILLISECOND); ? ? ? ?

System.out.println(y + "-" + m + "-" + d + " " + w + " " + hh + ":" + mm + ":" + ss + "." + ms);


TimeZone

Calendar和Date相比,它提供了時區轉換的功能。

? TimeZone tzDefault = TimeZone.getDefault(); // 當前時區? ? ? ?

?TimeZone tzGMT9 = TimeZone.getTimeZone("GMT+09:00"); // GMT+9:00時區 ? ? ? ?

TimeZone tzNY = TimeZone.getTimeZone("America/New_York"); // 紐約時區 ? ? ? ? System.out.println(tzDefault.getID()); // Asia/Shanghai

時區的唯一標識是以字符串表示的ID,我們獲取指定TimeZone對象也是以這個ID為參數獲取,GMT+09:00、Asia/Shanghai都是有效的時區ID。要列出系統支持的所有ID,請使用TimeZone.getAvailableIDs()。


LocalDateTime

是java8,java.time提供新的API

?LocalDate d = LocalDate.now(); // 當前日期 ? ? ? ?

LocalTime t = LocalTime.now(); // 當前時間 ? ? ? ?

LocalDateTime dt = LocalDateTime.now(); // 當前日期和時間

提供了對日期和時間進行加減的非常簡單的鏈式調用

?LocalDateTime dt = LocalDateTime.of(2019, 10, 26, 20, 30, 59); ? ? ? ?

System.out.println(dt); ? ? ? ?

// 加5天減3小時: ? ? ? ?

LocalDateTime dt2 = dt.plusDays(5).minusHours(3); ? ? ? ?

System.out.println(dt2); // 2019-10-31T17:30:59 ? ? ? ?

// 減1月: ? ? ? ?

LocalDateTime dt3 = dt2.minusMonths(1); ? ? ? ?

System.out.println(dt3); // 2019-09-30T17:30:59

對時間和日期進行調整

?LocalDateTime dt = LocalDateTime.of(2019, 10, 26, 20, 30, 59); ? ? ? ?

System.out.println(dt); ? ? ? ?

// 日期變為31日: ? ? ? ?

LocalDateTime dt2 = dt.withDayOfMonth(31); ? ? ? ?

System.out.println(dt2);

// 2019-10-31T20:30:59 ? ? ? ?

// 月份變為9: ? ? ? ?

LocalDateTime dt3 = dt2.withMonth(9); ? ? ? ?

System.out.println(dt3); // 2019-09-30T20:30:59

LocalDateTime還有一個通用的with()方法允許我們做更復雜的運算

?// 本月第一天0:00時刻: ? ? ? ?

LocalDateTime firstDay = LocalDate.now().withDayOfMonth(1).atStartOfDay(); ? ? ? ? System.out.println(firstDay); ? ? ? ?

// 本月最后1天: ? ? ? ?

LocalDate lastDay = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()); ? ? ? ? System.out.println(lastDay); ? ? ? ?

// 下月第1天: ? ? ? ?

LocalDate nextMonthFirstDay = LocalDate.now().with(TemporalAdjusters.firstDayOfNextMonth()); ? ? ? ? System.out.println(nextMonthFirstDay); ? ? ? ?

// 本月第1個周一: ? ? ? ?

LocalDate firstWeekday = LocalDate.now().with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)); ?System.out.println(firstWeekday);

要判斷兩個LocalDateTime的先后,可以使用isBefore()、isAfter()方法,對于LocalDate和LocalTime

? LocalDateTime now = LocalDateTime.now(); ? ? ? ?

LocalDateTime target = LocalDateTime.of(2019, 11, 19, 8, 15, 0); ? ? ? ? System.out.println(now.isBefore(target)); ? ? ? ? System.out.println(LocalDate.now().isBefore(LocalDate.of(2019, 11, 19))); ? ? ? ? System.out.println(LocalTime.now().isAfter(LocalTime.parse("08:15:00")));


DateTimeFormatter

如果要自定義輸出的格式,或者要把一個非ISO 8601格式的字符串解析成LocalDateTime

? // 自定義格式化: ? ? ? ?

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); ? ? ? ? System.out.println(dtf.format(LocalDateTime.now())); ? ? ? ?

// 用自定義格式解析: ? ? ? ?

LocalDateTime dt2 = LocalDateTime.parse("2019/11/30 15:16:17", dtf); ? ? ? ? System.out.println(dt2);


Duration

表示兩個時刻得時間間隔

? LocalDateTime start = LocalDateTime.of(2019, 11, 19, 8, 15, 0); ? ? ? ?

LocalDateTime end = LocalDateTime.of(2020, 1, 9, 19, 25, 30); ? ? ? ?

Duration d = Duration.between(start, end); ? ? ? ?

System.out.println(d); // PT1235H10M30S


Period

表示兩個日期間隔的天數

Period p = LocalDate.of(2019, 11, 19).until(LocalDate.of(2020, 1, 9)); ? ? ? ?

System.out.println(p); // P1M21D


ZonedDateTime

和LocalDateTime相比,增加了時區,可以理解為LocalDateTime+ZonedId

? ZonedDateTime zbj = ZonedDateTime.now(); // 默認時區 ? ? ? ?

ZonedDateTime zny = ZonedDateTime.now(ZoneId.of("America/New_York")); // 用指定時區獲取當前時間

另一種方式是通過給一個LocalDateTime附加一個ZoneId,就可以變成ZonedDateTime

LocalDateTime ldt = LocalDateTime.of(2019, 9, 15, 15, 16, 17); ? ? ? ? ZonedDateTime zbj = ldt.atZone(ZoneId.systemDefault()); ? ? ? ?

ZonedDateTime zny = ldt.atZone(ZoneId.of("America/New_York"));

要轉換時區,首先我們需要有一個ZonedDateTime對象,然后,通過withZoneSameInstant()將關聯時區轉換到另一個時區,轉換后日期和時間都會相應調整。

?// 以中國時區獲取當前時間: ? ? ? ?

ZonedDateTime zbj = ZonedDateTime.now(ZoneId.of("Asia/Shanghai")); ? ? ? ?

// 轉換為紐約時間: ? ? ? ?

ZonedDateTime zny = zbj.withZoneSameInstant(ZoneId.of("America/New_York"));


DateTimeFormatter

使用舊的Date對象時,我們用SimpleDateFormat進行格式化顯示。使用新的LocalDateTime或ZonedDateTime時,我們要進行格式化顯示,就要使用DateTimeFormatter。

和SimpleDateFormat不同的是,DateTimeFormatter不但是不變對象,它還是線程安全的。因為SimpleDateFormat不是線程安全的,使用的時候,只能在方法內部創建新的局部變量。而DateTimeFormatter可以只創建一個實例,到處引用。

創建DateTimeFormatter

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");

另一種是加入時區

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm", Locale.US);

?ZonedDateTime zdt = ZonedDateTime.now(); ? ? ? ?

var formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm ZZZZ"); ? ? ? ? System.out.println(formatter.format(zdt)); ? ? ? ?

var zhFormatter = DateTimeFormatter.ofPattern("yyyy MMM dd EE HH:mm", Locale.CHINA); ? ? ? ? System.out.println(zhFormatter.format(zdt)); ? ? ? ?

var usFormatter = DateTimeFormatter.ofPattern("E, MMMM/dd/yyyy HH:mm", Locale.US); ? ? ? ? System.out.println(usFormatter.format(zdt));

輸出結果為

2019-09-15T23:16 GMT+08:00

2019 9月 15 周日 23:16 Sun

September/15/2019 23:16

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

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

相關文章

【MySQL】從連接數據庫開始:JDBC 編程入門指南

個人主頁:?喜歡做夢 歡迎 👍點贊 ?關注 ??收藏 💬評論 目錄 🌟一、什么是JDBC? 🌟二、JDBC編程的步驟 ?使用步驟 ?DriverManger 💫定義 💫DriverManger的主要功能 …

重生之我在暑假學習微服務第一天《MybatisPlus-上篇》

本系列參考黑馬程序員微服務課程,有興趣的可以去查看相關視頻,本系列內容采用漸進式方式講解微服務核心概念與實踐方法,每日更新確保知識點的連貫性。通過系統化學習路徑幫助開發者掌握分布式系統構建的關鍵技術。讀者可通過平臺訂閱功能獲取…

odoo-060 git版本:發布/生產版本落后開發版本部署

文章目錄問題起源目前解決問題起源 周五提交了一個版本,本來打算使用這個版本的,周末更新。 下一個功能比較復雜,周一提交,結果周末沒有更新,導致現在還有沒測試過的不能發布的。 說明: 原來只有一個mast…

YotoR模型:Transformer與YOLO新結合,打造“又快又準”的目標檢測模型

【導讀】在目標檢測領域,YOLO系列以其高效的推理速度廣受歡迎,而Transformer結構則在精度上展現出強大潛力。如何兼顧二者優勢,打造一個“又快又準”的模型,是近年來研究熱點之一。本文介紹的一項新研究——YotoR(You …

白楊SEO:流量的本質是打開率?搞用戶搜索流量的玩法怎么做?

大家好,我是白楊SEO,專注研究SEO十年以上,全網SEO流量實戰派,AI搜索優化研究者。上周六參加了生財航海家在杭州舉行的私域運營大會,主題是圍繞私域獲客,私域IP,AI私域,精細化管理。白…

Java優雅使用Spring Boot+MQTT推送與訂閱

在物聯網(IoT)和智能設備橫行的今天,你有沒有遇到這樣的問題:服務端需要實時把報警、狀態更新、控制指令推送給客戶端;安卓 App、嵌入式設備、網頁等終端,需要輕量且穩定的連接方式;HTTP 太“重…

多目標粒子群優化(MOPSO)解決ZDT1問題

前言 提醒: 文章內容為方便作者自己后日復習與查閱而進行的書寫與發布,其中引用內容都會使用鏈接表明出處(如有侵權問題,請及時聯系)。 其中內容多為一次書寫,缺少檢查與訂正,如有問題或其他拓展…

Coze Studio概覽(三)--智能體管理

本文簡要分析了Coze Studio中智能體管理功能,包括功能、架構以及核心流程。Coze Studio 智能體管理功能分析 1. 智能體管理架構概覽 Coze Studio的智能體管理系統基于DDD架構,主要包含以下核心模塊: 后端架構層次: API層 (coze): …

idea運行tomcat日志亂碼問題

原因在于idea和tomcat文件編碼格式不一樣。可以把idea編碼改成UTF-8 File | Settings | Editor | File Encodings 里面把GBK都改成UTF-8help里面 Edit Custom VM Options 添加一行-Dfile.encodingUTF-8重啟idea

Javaweb - 13 - AJAX

發送請求的幾種方式1. 瀏覽器的地址框中輸入地址,回車2. html --> head --> scrip / linkimg 自動發送請求,無需手動觸發3. a 標簽,form 表單標簽需要手動控制提交產生,且往往需要在新的頁面上獲得響應信息4. 運行 JS 代碼…

qt常用控件-06

文章目錄qt常用控件-06spinBox/doubleSpinBoxdateTimeEditdialSliderlistWIdgettableWidgettreeWidget結語很高興和大家見面,給生活加點impetus!!開啟今天的編程之路!! 今天我們進一步c11中常見的新增表達 作者&#…

小智源碼分析——音頻部分(二)

一、利用創建好的對象來調用音頻服務 上周從上圖的getaudiocode()方法進去感受了一下底層小智的構造如何實現。所以用一個codec來接收我們所構造的音頻對象。下來是用構造好的音頻對象來調用音頻初始化服務Initialize,因為啟動函數Application函數的類中有audio_ser…

菜鳥的C#學習(四)

文章目錄一、格式說明符1.1、數字格式說明符(適用于數值類型:int, double, decimal 等)1. 標準數字格式2. 自定義數字格式1.2、日期時間格式說明符(適用于 DateTime, DateTimeOffset)1. 標準日期時間格式2. 自定義日期…

基于黑馬教程——微服務架構解析(二)

本篇文章基于黑馬程序員的微服務課程內容,結合個人學習過程中的理解與思考進行整理。本節將圍繞以下幾個問題展開:什么是網關和配置管理前面那篇文章,我們了解如何把一個單體的項目拆成分布式微服務項目,并且講解一下各個服務之間…

Text2SQL智能問答系統開發(一)

開發一個面向企業的chatBI工作流 已完成 基礎 Text2SQL 功能實現 實現用戶輸入自然語言問題后,系統能夠自動生成 SQL 并執行返回結果。用戶交互優化 支持用戶通過補充信息對查詢進行調整,提升易用性。模糊時間處理機制 對“最近”“近期”等模糊時間關…

Python HTML模塊詳解:從基礎到實戰

一、模塊體系全景圖 Python生態中處理HTML的工具可分為三大層級: 標準庫基礎層:html模塊 html.parser第三方增強層:BeautifulSoup(搭配解析器)專業級工具層:lxml requests-html 二、標準庫核心模塊詳解…

PyTorch常用Tensor形狀變換函數詳解

PyTorch常用Tensor形狀變換函數詳解 在PyTorch中,對張量(Tensor)進行形狀變換是深度學習模型構建中不可或缺的一環。無論是為了匹配網絡層的輸入要求,還是為了進行數據預處理和維度調整,都需要靈活運用各種形狀變換函數…

自主智能Agent如何重塑工作流自動化:技術、經濟與未來展望

自主智能Agent的崛起與工作流自動化的范式革命2025年7月,當OpenAI向付費用戶推出具備網頁瀏覽和代碼執行能力的ChatGPT Agent時,工作流自動化領域迎來了一場靜默但徹底的革命。這款不再滿足于簡單問答的智能體,在一個安全的虛擬計算機環境中運…

技術架構、行業應用、工具鏈整合、挑戰應對及未來趨勢五大模塊,引用多個權威來源數據與開源項目實現細節。

以下是一份關于AI技術落地的實戰經驗總結報告,結合代碼示例、可視化圖表與行業案例,內容分為技術架構、行業應用、工具鏈整合、挑戰應對及未來趨勢五大模塊,引用多個權威來源數據與開源項目實現細節。AI技術落地實戰指南:從架構設…

第 9 篇:神經網絡初探——當AI擁有了“大腦”,世界從此不同

《人工智能AI之機器學習基石》系列⑨ 專欄核心理念: 用通俗語言講清楚機器學習的核心原理,強調“洞察 + 技術理解 + 應用連接”,構建一個完整的、富有啟發性的知識體系。