【Java學習筆記】日期類

日期類

第一代日期類:Date

引入包

1. 基本介紹

2. Date 格式化的參數表

請添加圖片描述

3. 方法介紹

(1)Date

(2)SimpleDateFormat

代碼示例

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class main {public static void main(String[] args) throws ParseException {Date date = new Date();System.out.println("date:" + date);Date date1 = new Date(89875);System.out.println("date1:" + date1);// 使用 SimpleDateFormat 來格式化日期(Date --> String)SimpleDateFormat sf = new SimpleDateFormat("yyyy 年 MM 月 dd 日 hh:mm:ss E");String format_date = sf.format(date);System.out.println("Formatted date: " + format_date);// String --> DateString s = "1996 年 01 月 01 日 10:20:30 星期一";Date String_to_Date = sf.parse(s);System.out.println("parse = " + sf.format(String_to_Date));}
}// 輸出結果
date:Sun Jun 08 17:51:23 CST 2025
date1:Thu Jan 01 08:01:29 CST 1970
Formatted date: 2025060805:51:23 星期日
parse = 1996010110:20:30 星期一

二、第二代日期類:Calendar

引入包:java.util.Calendar

基本介紹

常用字段

字段描述
YEAR年份
MONTH月份(0-11) 從 0 開始編號
DAY_OF_MONTH當前月的天數
HOUR當前小時(0-23)
MINUTE當前分鐘(0-59)
SECOND當前秒數(0-59)
DAY_OF_WEEK一周中的某一天(1-7,1 代表星期天)
WEEK_OF_YEAR一年的第幾周
WEEK_OF_MONTH當前月的第幾周
AM_PM上午或下午(0 為上午1 為下午

獲取當前時間:getTime()方法

Calendar date = Calendar.getInstance();// 輸出當前日期時間
System.out.println("日期:" + date.getTime());

代碼示例

package arrays;import java.util.Calendar;public class main {public static void main(String[] args) {Calendar date = Calendar.getInstance();// 輸出當前日期時間System.out.println("=====輸出當前日期時間=====");System.out.println("日期:" + date.getTime());System.out.println();// 輸出年、月、日、時、分、秒等信息System.out.println("=====輸出年、月、日、時、分、秒等信息=====");System.out.println("年:" + date.get(Calendar.YEAR));System.out.println("月:" + (date.get(Calendar.MONTH) + 1)); // 月份是從0開始的,所以要加1System.out.println("日:" + date.get(Calendar.DAY_OF_MONTH));System.out.println("小時:" + date.get(Calendar.HOUR_OF_DAY)); // 24小時制System.out.println("分鐘:" + date.get(Calendar.MINUTE));System.out.println("秒:" + date.get(Calendar.SECOND));System.out.println();// 拼接年月日時分秒System.out.println("=====拼接年月日時分秒=====");String currentDateTime = date.get(Calendar.YEAR) + "年"+ (date.get(Calendar.MONTH) + 1) + "月"+ date.get(Calendar.DAY_OF_MONTH) + "日 "+ date.get(Calendar.HOUR_OF_DAY) + ":"+ date.get(Calendar.MINUTE) + ":"+ date.get(Calendar.SECOND);System.out.println("當前時間:" + currentDateTime);System.out.println();// 輸出一周中的某一天、周數等System.out.println("=====輸出一周中的某一天、周數等=====");System.out.println("星期幾:" + date.get(Calendar.DAY_OF_WEEK)); // 1代表星期天,7代表星期六System.out.println("一年中的第幾周:" + date.get(Calendar.WEEK_OF_YEAR));System.out.println("當前月的第幾周:" + date.get(Calendar.WEEK_OF_MONTH));System.out.println();// 輸出上午下午信息System.out.println("=====輸出上午下午信息=====");System.out.println("上午 / 下午:" + (date.get(Calendar.AM_PM)));}
}// 輸出結果
=====輸出當前日期時間=====
日期:Sun Jun 08 18:14:53 CST 2025=====輸出年、月、日、時、分、秒等信息=====
年:2025
月:6
日:8
小時:18
分鐘:14
秒:53=====拼接年月日時分秒=====
當前時間:20256818:14:53=====輸出一周中的某一天、周數等=====
星期幾:1
一年中的第幾周:24
當前月的第幾周:2=====輸出上午下午信息=====
上午 / 下午:1

三、第三代日期類

引入包

1. 引言

前面兩代日期類的不足分析

JDK 1.0 中包含了一個 java.util.Date 類,但是它的大多數方法已經在 JDK 1.1 引入 Calendar 類之后被棄用了。而Calendar存在問題是:

2. 常用類

(1)時間的表示

補充:時間的創建

方法名描述
LocalTime.of(hour, minute)創建一個表示特定時間的 LocalTime 對象(包含小時、分鐘)。
LocalTime.of(hour, minute, second)創建一個表示特定時間的 LocalTime 對象(包含小時、分鐘和秒)。
LocalTime.of(hour, minute, second, nanoOfSecond)創建一個表示特定時間的 LocalTime 對象(包含小時、分鐘、秒和納秒)。

(2)日期的計算

適用于LocalDateLocalTimeLocalDateTime

方法解釋
plusDays(long daysToAdd)將指定的天數加到當前日期(LocalDateLocalDateTime)。
minusDays(long daysToSubtract)從當前日期(LocalDateLocalDateTime)中減去指定的天數。
plusMonths(long monthsToAdd)將指定的月數加到當前日期(LocalDateLocalDateTime)。
minusMonths(long monthsToSubtract)從當前日期(LocalDateLocalDateTime)中減去指定的月數。
plusYears(long yearsToAdd)將指定的年數加到當前日期(LocalDateLocalDateTime)。
minusYears(long yearsToSubtract)從當前日期(LocalDateLocalDateTime)中減去指定的年數。

補充類

關于between()方法傳參問題的說明

(1)Period.between()方法

方法名傳入參數類型適用情況說明
Period.between()LocalDate用于計算日期差(年、月、日)只能用于 LocalDate 類型的日期之間的差異。無法處理時間差(時、分、秒)。

(2)Duration.between()方法

方法名傳入參數類型適用情況說明
Duration.between()Temporal(如 LocalTime, LocalDateTime, Instant用于計算時間差(時、分、秒)Temporal 是一個接口,LocalTimeLocalDateTimeInstant 實現了此接口,可以用于計算這三者之間的時間差。

(3)日期的格式化DateTimeFormatter類(不可變且線程安全的類

(4)時間戳

  • Instant: 用于表示時間戳,通常與 UTC 時間一起使用,精確到納秒。例如:2025-06-08T09:30:00Z。

  • from()方法:InstantDate

  • toInstant()方法:DateInstant

3. get...()方法整理

注意:java.time 類庫中的 get() 方法返回的是真實數據并且不會從 0 開始編號

方法描述
年月日相關
getYear()獲取當前年份
getMonthValue()獲取當前月份(1-12
getMonth()獲取當前月份的名稱
getDayOfMonth()獲取當前日期(1-31)
getDayOfYear()獲取當前日期是今年的第幾天(1 - 365/366)
getDayOfWeek().getValue()獲取當前星期幾(1=星期一, 7=星期天)
時分秒相關
getHour()獲取當前小時(0-23)
getMinute()獲取當前分鐘(0-59)
getSecond()獲取當前秒數(0-59)

一、時間的表示:代碼示例

說明:LocalDateLocalTime方法類似(需要導入相關的包),這以LocalDateTime為例

import java.time.LocalDateTime;public class main {public static void main(String[] args) {LocalDateTime now = LocalDateTime.now();// 年月日相關System.out.println("當前年份: " + now.getYear());System.out.println("當前月份(1-12): " + now.getMonthValue());System.out.println("當前月份名稱: " + now.getMonth());System.out.println("當前日期(1-31): " + now.getDayOfMonth());System.out.println("當前日期是今年的第幾天: " + now.getDayOfYear());System.out.println("當前星期幾(1=星期一, 7=星期天): " + now.getDayOfWeek().getValue());// 時分秒相關System.out.println("當前小時(0-23): " + now.getHour());System.out.println("當前分鐘(0-59): " + now.getMinute());System.out.println("當前秒數(0-59): " + now.getSecond());}
}// 輸出信息
當前年份: 2025
當前月份(1-12: 6
當前月份名稱: JUNE
當前日期(1-31: 8
當前日期是今年的第幾天: 159
當前星期幾(1=星期一, 7=星期天): 7
當前小時(0-23: 19
當前分鐘(0-59: 55
當前秒數(0-59: 59

二、日期的格式化:代碼示例

補充:類比記憶Date中的格式化

調用SimpleDateFormat構造器傳入格式化信息的字符串

(1)format代碼示例

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;public class main {public static void main(String[] args) {LocalDateTime now  = LocalDateTime.now();// 創建格式化對象DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss E");// 格式化字符串String format_date = dtf.format(now);// 輸出格式化后的時間信息System.out.println(format_date);}
}// 輸出示例
2025-06-08 20:14:56 星期日

(2)parse代碼示例

傳參:parse(n1,n2)

注意:被格式化字符串要和格式化信息匹配,否則會拋出異常(DateTimeParseException

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;public class main {public static void main(String[] args) {String str_datetime = "2025-06-08 14:30:00";// 創建格式化對象DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");// String --> LocalDateTimeLocalDateTime localDateTime = LocalDateTime.parse(str_datetime,dtf);System.out.println(localDateTime);}
}// 輸出結果
2025-06-08T14:30

三、日期的計算:代碼示例

(1)對于LocalDateTimeLocalDateLocalTime的計算方法

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;public class main {public static void main(String[] args) {// 獲取當前時間LocalDateTime now = LocalDateTime.now();// 定義日期格式化器DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");// 格式化當前日期String formattedDate = now.format(formatter);System.out.println("當前日期和時間(格式化): " + formattedDate);// 添加和減去天數并格式化LocalDateTime newDate = now.plusDays(10);System.out.println("加10天后的日期(格式化): " + newDate.format(formatter));newDate = now.minusDays(5);System.out.println("減去5天后的日期(格式化): " + newDate.format(formatter));// 添加和減去月數并格式化newDate = now.plusMonths(3);System.out.println("加3個月后的日期(格式化): " + newDate.format(formatter));newDate = now.minusMonths(2);System.out.println("減去2個月后的日期(格式化): " + newDate.format(formatter));// 添加和減去年數并格式化newDate = now.plusYears(1);System.out.println("加1年后的日期(格式化): " + newDate.format(formatter));newDate = now.minusYears(4);System.out.println("減去4年后的日期(格式化): " + newDate.format(formatter));}
}// 輸出結果
當前日期和時間(格式化): 2025-06-08 20:48:4210天后的日期(格式化): 2025-06-18 20:48:42
減去5天后的日期(格式化): 2025-06-03 20:48:423個月后的日期(格式化): 2025-09-08 20:48:42
減去2個月后的日期(格式化): 2025-04-08 20:48:421年后的日期(格式化): 2026-06-08 20:48:42
減去4年后的日期(格式化): 2021-06-08 20:48:42

(2)Period 代碼示例

import java.time.LocalDate;
import java.time.Period;public class PeriodExample {public static void main(String[] args) {LocalDate startDate = LocalDate.of(2020, 1, 1);LocalDate endDate = LocalDate.of(2025, 6, 8);Period period = Period.between(startDate, endDate);System.out.println("期間:");System.out.println("年: " + period.getYears());System.out.println("月: " + period.getMonths());System.out.println("日: " + period.getDays());}
}// 輸出結果
期間:
年: 5: 5: 7

(3)Duration 代碼示例

import java.time.Duration;
import java.time.LocalDateTime;public class DurationExample {public static void main(String[] args) {LocalDateTime startTime = LocalDateTime.of(2025, 6, 8, 10, 30, 0);LocalDateTime endTime = LocalDateTime.of(2025, 6, 9, 12, 45, 0);Duration duration = Duration.between(startTime, endTime);System.out.println("持續時間:");System.out.println("小時: " + duration.toHours());System.out.println("分鐘: " + duration.toMinutes());System.out.println("秒: " + duration.getSeconds());}
}// 運行結果
持續時間:
小時: 26
分鐘: 1575: 94500

(4)綜合計算年月日時分秒的差值

Period類和Duration類的綜合使用

注意點:注意取模

import java.time.Duration;
import java.time.LocalDateTime;
import java.time.Period;public class main {public static void main(String[] args) {// 定義兩個時間點LocalDateTime start = LocalDateTime.of(2025, 6, 1, 14, 30, 0);LocalDateTime end = LocalDateTime.of(2025, 6, 8, 18, 45, 30);// 計算日期差(年月日)Period period = Period.between(start.toLocalDate(), end.toLocalDate());// 計算時分秒差(從完整的時間差中提取)Duration duration = Duration.between(start, end);// 計算日期差(年、月、天)int years = period.getYears();int months = period.getMonths();int days = period.getDays();// 計算時間差(時、分、秒)long hours = duration.toHours() % 24; // 剩余小時long minutes = duration.toMinutes() % 60; // 剩余分鐘long seconds = duration.getSeconds() % 60; // 剩余秒數// 輸出日期差(年、月、天)System.out.println("日期差: " + years + "年 " + months + "月 " + days + "天");// 輸出時間差(時、分、秒)System.out.println("時分秒差: " + hours + "小時 " + minutes + "分鐘 " + seconds + "秒");}// 運行結果
日期差: 007天
時分秒差: 4小時 15分鐘 30

四、時間戳:代碼示例

import java.time.Instant;
import java.util.Date;public class main {public static void main(String[] args) {// 獲取當前時間戳Instant instant_now = Instant.now();System.out.println("instant_now:" + instant_now);// Instant --> DateDate date = Date.from(instant_now);System.out.println("date:" + date);// Date --> instantInstant date_to_instant = date.toInstant();System.out.println(date_to_instant);}
}

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

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

相關文章

C++基礎進階:函數、內聯函數與Lambda函數詳解

引言 在C編程的旅程中,函數是構建復雜程序的基本單元。它們像樂高積木一樣,允許我們將代碼分解成更小、更易于管理的部分。今天,我們將深入探討C中的三種重要函數類型:普通函數、內聯函數以及Lambda函數。掌握它們,將…

從Node.js到React/Vue3:流式輸出技術的全棧實現指南

本文將從底層原理到工程實踐,完整解析如何使用Node.js后端結合React和Vue3前端實現流式輸出功能,涵蓋協議選擇、性能優化、錯誤處理等關鍵細節,并通過真實場景案例演示完整開發流程。 一、流式輸出的核心原理與協議選擇 1.1 流式傳輸的底層機…

AT2401C中科微2.4g芯片PA

作為無線通信系統的核心模塊,射頻前端芯片通過整合功率放大器(PA)、濾波器、開關和低噪聲放大器(LNA)等關鍵組件,成為保障通信質量、降低功耗及維持信號穩定的決定性因素。 AT2401C是一款面向2.4GHz無線通信…

Linux安裝jdk、tomcat

1、安裝jdk sudo yum install -y java-1.8.0-openjdk-devel碰到的問題:/var/run/yum.pid 已被鎖定 Another app is currently holding the yum lock; waiting for it to exit… https://blog.csdn.net/u013669912/article/details/131259156 參考&#…

在本地電腦中部署阿里 Qwen3 大模型及連接到 Elasticsearch

在今天的文章中,我將參考文章 “使用 Elastic 和 LM Studio 的 Herding Llama 3.1” 來部署 Qwen3 大模型。據測評,這是一個非常不錯的大模型。我們今天嘗試使用 LM Studio 來對它進行部署,并詳細描述如何結合 Elasticsearch 來對它進行使用。…

【設計模式】2.策略模式

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 商場收銀軟件為例 1. 基礎版 total 0def click_ok(price,num):tot price * numtotal totprint(合計:, total)增加打折 total 0def cli…

c++中的輸入輸出流(標準IO,文件IO,字符串IO)

目錄 &#xff08;1&#xff09;I/O概述 I/O分類 不同I/O的繼承關系 不同I/O對應的頭文件 &#xff08;2&#xff09;iostream 標準I/O流 iostream頭文件中的IO流對象 iostream頭文件中重載了<<和>> 緩沖區示意圖 標準輸入流 cin用法 cin&#xff1a;按空…

人工智能學習06-循環

人工智能學習概述—快手視頻 人工智能學習06-循環—快手視頻

【電路】阻抗匹配

&#x1f4dd; 阻抗匹配 一、什么是阻抗匹配&#xff1f; 阻抗匹配&#xff08;Impedance Matching&#xff09;是指在電子系統中&#xff0c;為了實現最大功率傳輸或最小信號反射&#xff0c;使信號源、傳輸線與負載之間的阻抗達到一種“匹配”狀態的技術。 研究對象&#x…

【vue】Uniapp 打包Android 文件選擇上傳問題詳解~

需求 uniapp兼容android app&#xff0c;pc&#xff0c;h5的文件選擇并上傳功能。 需要支持拍照和相冊選擇&#xff0c;以及選擇其他類型文件上傳~ 實踐過程和問題 開始使用uni-file-picker組件 以為很順利&#xff0c;android模擬器測試…… 忽略了平臺兼容性提示~&#…

Python:操作 Excel 格式化

??Python 操作 Excel 格式化完整指南(openpyxl 與 xlsxwriter 雙方案) 在數據處理和報表自動化中,Python 是一把利器,尤其是配合 Excel 文件的讀寫與格式化處理。本篇將詳細介紹兩大主流庫: openpyxl:適合讀取與修改現有 Excel 文件xlsxwriter:適合創建新文件并進行復…

Prompt Enginering(提示工程)先進技術

前沿 CoT&#xff08;Chain-of-Thought&#xff09;和 ReACT&#xff08;Reasoning and Acting&#xff09;是兩種先進的 Prompt Engineering&#xff08;提示工程&#xff09; 技術&#xff0c;旨在提升大語言模型&#xff08;LLM&#xff09;的推理、規劃和執行能力。 CoT&a…

【C++系列】模板類型特例化

1. C模板類型特例化介紹 ??定義??&#xff1a;模板類型特例化&#xff08;Template Specialization&#xff09;是C中為模板的特定類型提供定制實現的機制&#xff0c;允許開發者對通用模板無法處理的特殊類型進行優化或特殊處理。 ??產生標準??&#xff1a; C98/03…

AI數據分析在體育中的應用:技術與實踐

在現代體育競技領域&#xff0c;"數據驅動"已不再是一個遙遠的概念。尤其隨著人工智能&#xff08;AI&#xff09;和大數據分析的不斷成熟&#xff0c;從職業俱樂部到賽事直播平臺&#xff0c;從運動員訓練到球迷觀賽體驗&#xff0c;AI正以前所未有的方式滲透并改變…

計數思想-眾數

11203-眾數 題目描述(Description) 眾數是指在一組數據中&#xff0c;出現次數最多的數。例如&#xff1a;1, 1, 3 中出現次數最多的數為 1&#xff0c;則眾數為 1。 給定一組數&#xff0c;你能求出眾數嗎&#xff1f; 輸入格式(Format Input) 第 1 行輸入一個整數 n (1 &…

【Go語言基礎【20】】Go的包與工程

文章目錄 零、概述一、包基礎1、包的核心作用2、包的聲明與結構2.1、 包聲明&#xff08;Package Declaration&#xff09;2.2、 包的目錄結構&#xff08;工程視角&#xff09; 3、包的導入與調用3.1、導入包&#xff08;Import Packages&#xff09;3.2、 調用包成員3.3、 導…

《C++初階之入門基礎》【命名空間 + 輸入輸出 + 缺省參數 + 函數重載】

【命名空間 輸入&輸出 缺省參數 函數重載】目錄 前言&#xff1a;---------------hello world---------------比較C語言和C的第一個程序&#xff1a;hello word ---------------命名空間---------------什么是命名空間&#xff1f;怎么使用命名空間&#xff1f;怎么定義…

java綜合項目開發一課一得

文章目錄 Java 綜合項目課程學習&#xff1a;探索與成長之路一、課程初體驗&#xff1a;從理論走向實踐&#xff08;一&#xff09;系統學習 Java 核心理論知識&#xff08;二&#xff09;開啟首個實踐項目 —— 圖書管理系統 二、項目攻堅&#xff1a;挑戰與突破&#xff08;一…

JuiceFS v1.3-Beta2:集成 Apache Ranger,實現更精細化的權限控制

在大數據場景中&#xff0c;文件系統和應用組件的權限管理至關重要。在最新發布的 JuiceFS 社區版 v1.3-Beta 2 中&#xff0c;JuiceFS 引入了與 Apache Ranger 的集成&#xff0c;提供了更為靈活和細粒度的權限控制解決方案。 本文將介紹 JuiceFS 社區版如何與 Apache Ranger…

6月8日day48打卡

隨機函數與廣播機制 知識點回顧&#xff1a; 隨機張量的生成&#xff1a;torch.randn函數卷積和池化的計算公式&#xff08;可以不掌握&#xff0c;會自動計算的&#xff09;pytorch的廣播機制&#xff1a;加法和乘法的廣播機制 ps&#xff1a;numpy運算也有類似的廣播機制&…