亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中日期時間的用法總結(jié)

 更新時間:2023年09月08日 11:21:06   作者:god23bin  
在日常開發(fā)中,我們經(jīng)常需要處理日期和時間,所以這篇文章小編為大家總結(jié)了下?Java?中日期與時間的基本概念與一些常用的用法,希望對大家有所幫助

前言

在日常開發(fā)中,我們經(jīng)常需要處理日期和時間,日期和時間可以說是一定會用到的,現(xiàn)在總結(jié)下 Java 中日期與時間的基本概念與一些常用的用法。

基本概念

日期(年月日,某一天):2023-01-05

時間(時分秒,可具體到某一天某一刻):18:00:00、2023-01-05 18:00:00

本地時間:平常我們說的,比如現(xiàn)在說明天早上七點鐘,這里說的時間就是本地時間,在咱們中國,指的就是北京時間。但是在明天早上七點鐘,對于其他國家的人來說,他們的本地時間就不一樣了。

時區(qū):由于世界各個國家與地區(qū)經(jīng)度不同,本地時間也有所不同,所以劃分了不同的時區(qū),目前劃分的是24個時區(qū),咱們就位于東八區(qū)。目前需要了解的時區(qū)的表達方式知道兩種就可以了。

  • 以 GMT 或者 UTC 加時區(qū)偏移量表示,例如:GMT+08:00 或者 UTC+08:00 表示東八區(qū)
  • 以 洲/城市 表示,例如,Asia/Shanghai,表示上海所在地的時區(qū)。不過這里的城市名稱不是任意的城市,而是由國際標準組織規(guī)定的城市。

Java 8 之前日期時間相關(guān)的類

在 Java 8 之前,主要使用的日期和時間 API 包括:

  • java.util.Date
  • java.util.Calendar
  • java.text.SimpleDateFormat

1. Date

Date 是 Java 中表示日期和時間的類,一般用于獲取當前的日期和時間,比如更新數(shù)據(jù)庫中記錄的時候,需要更新某個日期時間,那么就直接 new Date(),這樣實例化的 Date 對象就是當前的這一時刻。

Date date = new Date();
// 可以打印當前日期時間
System.out.println(date.toString()); // 控制臺輸出 Thu Jan 05 18:41:11 CST 2023

2. SimpleDateFormat

SimpleDateFormat 是 Java 中用于格式化日期和時間的類,此處所謂格式化,就是字面意思,統(tǒng)一格式,即它允許你將日期和時間按照指定的格式轉(zhuǎn)換成字符串,也可以將對應格式的字符串解析成日期和時間對象。

主要用法就是:

  • 格式化日期和時間
  • 解析字符串格式的日期和時間

format 方法-格式化日期時間,從 Date 到 String

使用 public final String format(Date date) 方法格式化日期時間。上面輸出的格式,不是我們想要的,所以需要進行日期時間的格式化。

最常用的一個格式化的模型是:yyyy-MM-dd HH:mm:ss

其中,yyyy 是年份,MM 是月份,dd 是天數(shù),后面同理,HH:mm:ss 是時、分、秒。

// 常用的格式化
String pattern1 = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sdf1 = new SimpleDateFormat(pattern1);
System.out.println(sdf1.format(date3)); // 輸出 2023-01-05 18:19:50
String pattern2 = "yyyy年MM月dd日 HH時mm分ss秒";
SimpleDateFormat sdf2 = new SimpleDateFormat(pattern2);
System.out.println(sdf2.format(date3)); // 輸出 2023年01月05日 18時19分50秒

parse 方法-字符串日期時間解析,從 String 到 Date

使用 public Date parse(String source) 方法將 String 轉(zhuǎn)成 Date

String input = "2023-01-01 00:00:01";
String pattern1 = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sdf3 = new SimpleDateFormat(pattern1);
try {
    // 將 String 類型的日期解析成 Date 類型的日期
    Date parsed = sdf3.parse(input);
    System.out.println(parsed);
} catch (ParseException e) {
    e.printStackTrace();
}

3. Calendar

Calendar 是 Java 中用于處理日期和時間的抽象基類。它提供了一個類似于日歷的機制,允許我們進行日期和時間的計算、格式化和解析。

簡而言之,這個類主要用于日期的計算,比如你想得到此刻前一天的日期。

Calendar 是一個抽象類,不能直接實例化。所以我們需要使用 getInstance() 方法獲取 Calendar 的實例:

Calendar calendar = Calendar.getInstance();

當我們有一個 Calendar 對象后,就可以表示日期和時間了,通過設置各個字段,如年、月、日、時、分、秒等來表示一個具體的日期和時間。

calendar.set(Calendar.YEAR, 2023);          // 設置年份為2023
calendar.set(Calendar.MONTH, Calendar.MAY); // 設置月份為5(從0開始,5表示六月)
calendar.set(Calendar.DAY_OF_MONTH, 16);    // 設置日期為16號

日期和時間的計算

Calendar允許你進行日期和時間的加減操作,例如:

calendar.add(Calendar.DAY_OF_MONTH, 7); // 增加7天

這將在當前日期的基礎(chǔ)上增加 7 天。

下表列出了 Java 中 Calendar 類常用的方法及其描述:

方法描述
get(int field)返回給定字段的值。例如,calendar.get(Calendar.MONTH) 返回月份。
set(int field, int value)設置給定字段的值。例如,calendar.set(Calendar.YEAR, 2023) 設置年份為2023。
add(int field, int amount)增加或減少給定字段的值。例如,calendar.add(Calendar.DAY_OF_MONTH, 1) 將日期增加一天。
getTime()返回表示此Calendar時間點的Date對象。
setTime(Date date)使用指定的Date對象設置此Calendar的時間點。
getTimeInMillis()返回以毫秒為單位表示此Calendar時間點的時間值。
setTimeInMillis(long millis)使用指定的時間值設置此Calendar的時間點。
getTimeZone()返回此Calendar使用的時區(qū)。
setTimeZone(TimeZone zone)設置此Calendar的時區(qū)。
isLenient()返回Calendar是否寬松,即是否允許非法日期。
setLenient(boolean lenient)設置Calendar是否寬松。
getActualMaximum(int field)返回給定字段的最大允許值。例如,calendar.getActualMaximum(Calendar.DAY_OF_MONTH) 返回當前月份的最大天數(shù)。

Java 8 引入的新的日期時間相關(guān)的類

當 Java 8 引入 java.time 包時,它引入了一些新的日期和時間 API,這些 API 旨在提供更強大、更易于使用、線程安全且具有本地化支持的日期和時間處理方式。

以下是這些 API 的概述:

  • LocalDate:表示日期,但不包含時間和時區(qū)信息。它提供了各種方法來處理日期,如創(chuàng)建、解析、格式化、計算日期差等。
  • LocalTime:表示時間,但不包含日期和時區(qū)信息。它用于處理時間,包括小時、分鐘、秒和毫秒。
  • LocalDateTime:它是 LocalDate 和 LocalTime 的組合,表示日期和時間,但仍不包含時區(qū)信息。它是處理日期和時間的主要類之一。
  • ZonedDateTime:表示帶有時區(qū)信息的日期和時間。它是 LocalDateTime 的擴展,可以處理時區(qū)的轉(zhuǎn)換和計算。
  • Duration:表示時間段的持續(xù)時間,以秒和納秒為單位。它用于測量兩個時間點之間的時間差。
  • Period:表示日期之間的時間段,以年、月和日為單位。它用于測量兩個日期之間的時間差。
  • DateTimeFormatter:主要用于將日期和時間格式化為字符串,或?qū)⒆址?strong>解析為日期和時間。它提供了各種預定義的格式化方式,并支持自定義格式。

1. LocalDate

直接通過調(diào)用其相關(guān)靜態(tài)方法就可以進行相關(guān)的日期處理:

LocalDate now = LocalDate.now(); 			// 獲取當前日期
LocalDate date = LocalDate.of(2023, 5, 15); // 創(chuàng)建指定日期
LocalDate parsedDate = LocalDate.parse("2023-05-15"); // 解析日期
int year = date.getYear(); 			// 獲取年份
int month = date.getMonthValue(); 	// 獲取月份
int day = date.getDayOfMonth(); 	// 獲取日期

2. LocalTime

同理,也是類似的,對時間進行處理:

LocalTime time = LocalTime.now(); 					// 獲取當前時間
LocalTime specificTime = LocalTime.of(14, 30, 0); 	// 創(chuàng)建指定時間
LocalTime parsedTime = LocalTime.parse("14:30:00"); // 解析時間
int hour = time.getHour(); 		// 獲取小時
int minute = time.getMinute(); 	// 獲取分鐘
int second = time.getSecond(); 	// 獲取秒

3. LocalDateTime

處理日期和時間:

LocalDateTime dateTime = LocalDateTime.now(); 								// 獲取當前日期和時間
LocalDateTime specificDateTime = LocalDateTime.of(2023, 5, 15, 14, 30); 	// 創(chuàng)建指定日期和時間
LocalDateTime parsedDateTime = LocalDateTime.parse("2023-05-15T14:30:00"); 	// 解析日期和時間,字母'T'用于分隔日期部分和時間部分。它的作用是明確表示日期和時間的分界線。

4. ZonedDateTime

處理帶有時區(qū)的日期和時間,我們可以使用 ZoneId.of("時區(qū)標識") 來獲取相應的時區(qū)對象:

ZoneId zone = ZoneId.of("America/New_York"); 			// 創(chuàng)建時區(qū)
ZonedDateTime zonedDateTime = ZonedDateTime.now(zone); 	// 獲取帶有時區(qū)的當前日期和時間

帶有時區(qū)信息的日期時間通常采用以下的格式:

2023-09-08T11:30:00+08:00[Asia/Shanghai]

這個例子表示的是 2023年9月8日11點30分,位于亞洲/上海時區(qū),時區(qū)偏移量為+08:00,也就是東八區(qū)。在這種表示中,日期時間后面跟著時區(qū)信息,方括號內(nèi)的部分為時區(qū)標識。

下面是一些常見的時區(qū)標識及其對應的時區(qū):

時區(qū)標識時區(qū)
Asia/Shanghai中國上海時區(qū)
America/New_York美國紐約時區(qū)
Europe/London英國倫敦時區(qū)
America/Los_Angeles美國洛杉磯時區(qū)
Asia/Tokyo日本東京時區(qū)
Europe/Paris法國巴黎時區(qū)
Australia/Sydney澳大利亞悉尼時區(qū)
Africa/Cairo埃及開羅時區(qū)
Pacific/Honolulu美國檀香山時區(qū)
Asia/Dubai阿拉伯迪拜時區(qū)

5. Duration

測量時間段的持續(xù)時間:

LocalDateTime start = LocalDateTime.of(2023, 9, 8, 11, 0);
LocalDateTime end = LocalDateTime.of(2023, 9, 8, 11, 30);
Duration duration = Duration.between(start, end); 	// 計算兩個時間點之間的時間差
long minutes = duration.toMinutes(); 				// 獲取分鐘數(shù)

6. Period

測量日期之間的時間段:

LocalDate startDate = LocalDate.of(2023, 9, 1);
LocalDate endDate = LocalDate.of(2023, 9, 8);
Period period = Period.between(startDate, endDate); // 計算兩個日期之間的時間差
int days = period.getDays(); 						// 獲取天數(shù)

7. DateTimeFormatter

格式化日期和時間:

LocalDateTime dateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = dateTime.format(formatter); // 格式化為字符串
LocalDateTime parsedDateTime = LocalDateTime.parse("2023-05-15 14:30:00", formatter); // 解析字符串為日期和時間

新日期時間 API 中常用的方法

以下是 Java 8 中新日期時間 API 中常用的方法,用于處理日期和時間的創(chuàng)建、獲取字段值、計算差異、格式化和解析等:

方法描述
LocalDate.now()獲取當前日期。
LocalTime.now()獲取當前時間。
LocalDateTime.now()獲取當前日期和時間。
LocalDate.of(int year, int month, int day)創(chuàng)建指定日期。
LocalTime.of(int hour, int minute)創(chuàng)建指定時間。
LocalDateTime.of(int year, int month, int day, int hour, int minute)創(chuàng)建指定日期和時間。
LocalDate.parse(CharSequence text)解析日期字符串。
LocalTime.parse(CharSequence text)解析時間字符串。
LocalDateTime.parse(CharSequence text)解析日期時間字符串。
LocalDate.getYear()獲取年份。
LocalDate.getMonthValue()獲取月份。
LocalDate.getDayOfMonth()獲取日期。
LocalTime.getHour()獲取小時。
LocalTime.getMinute()獲取分鐘。
LocalTime.getSecond()獲取秒。
LocalDateTime.plus(Duration amount)增加持續(xù)時間。
LocalDateTime.minus(Duration amount)減少持續(xù)時間。
Duration.between(Temporal startInclusive, Temporal endExclusive)計算兩個時間點之間的時間差。
Period.between(LocalDate startDateInclusive, LocalDate endDateExclusive)計算兩個日期之間的時間差。
DateTimeFormatter.ofPattern(String pattern)創(chuàng)建日期時間格式化器。
Temporal.format(DateTimeFormatter formatter)格式化為字符串。
TemporalAccessor.parse(CharSequence text, DateTimeFormatter formatter)解析字符串為日期或時間。
ZoneId.of(String zoneId)創(chuàng)建時區(qū)。
ZonedDateTime.now(ZoneId zone)獲取帶有時區(qū)的當前日期和時間。

開發(fā)中的用到的兩個注解

一般前端傳遞日期時間字符串,我們后端進行接收,就需要將日期時間字符串轉(zhuǎn)成我們需要的 Date 類型的日期時間,即 String 到 Date 的轉(zhuǎn)化

當我們從數(shù)據(jù)庫中查出日期時間,是 Date 類型的日期時間,返回給前端就提供 JSON 數(shù)據(jù),就需要講 Date 類型的日期時間轉(zhuǎn)成 字符串類型的日期時間,即 Date 到 String 的轉(zhuǎn)化

有兩個注解可以解決這兩件事:Spring 提供的 @DateTimeFormat 和 Jackson 提供的 @JsonFormat

Jackson 相關(guān)依賴:

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.13.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.13.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.4.2</version>
</dependency>

說明:

  • @DateTimeFormat :將 String 轉(zhuǎn)成 Date,主要用于處理前端傳遞的 String 類型的日期時間轉(zhuǎn)成 Java 中的 Date 類型的日期時間對象
  • @JsonFormat將 Date 轉(zhuǎn)成 String,主要用于處理后端從數(shù)據(jù)庫中查出的 Date 類型的日期時間,它可以用于標記 Java 類的屬性,以指定日期在 JSON 中的格式。

日常用在各種域?qū)ο蟮娜掌趯傩陨希热?DTO、VO、PO。

public class A {
    @JsonFormat(pattern = "yyyy年MM月", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy年MM月")
    private Date startTime;
    @JsonFormat(pattern = "yyyy年MM月", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy年MM月")
    private Date endTime;
}
public class B {
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date startTime;
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date endTime;
}

以上就是Java中日期時間的用法總結(jié)的詳細內(nèi)容,更多關(guān)于Java日期時間的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java打包ZIP文件的使用

    Java打包ZIP文件的使用

    本文詳細介紹了如何使用Java語言進行ZIP文件的創(chuàng)建、讀取和操作,通過java.util.zip包和第三方庫,可以高效地處理ZIP文件,并應用密碼保護和注釋等高級功能,在實際應用中,遵循最佳實踐可以提高程序的健壯性和安全性
    2025-02-02
  • Java之Spring簡單的讀取和存儲對象

    Java之Spring簡單的讀取和存儲對象

    這篇文章主要介紹了Spring的讀取和存儲對象,獲取 bean 對象也叫做對象裝配,是把對象取出來放到某個類中,有時候也叫對象注?,想進一步了解的同學可以參考本文
    2023-04-04
  • Java三大特性之多態(tài)詳解

    Java三大特性之多態(tài)詳解

    多態(tài)是繼封裝、繼承之后,面向?qū)ο蟮牡谌筇匦?。多態(tài): 是指同一行為,具有多個不同表現(xiàn)形式。本文將來和大家詳細說說Java中的多態(tài),需要的可以了解一下
    2022-10-10
  • Spring-AOP-ProceedingJoinPoint的使用詳解

    Spring-AOP-ProceedingJoinPoint的使用詳解

    這篇文章主要介紹了Spring-AOP-ProceedingJoinPoint的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Spring Hystrix熔斷報警原理圖例解析

    Spring Hystrix熔斷報警原理圖例解析

    這篇文章主要介紹了Spring Hystrix熔斷報警原理圖例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Java 鏈表的定義與簡單實例

    Java 鏈表的定義與簡單實例

    這篇文章主要介紹了 Java 鏈表的定義與簡單實例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 如何在Java中讀取resources下的文件及資源路徑

    如何在Java中讀取resources下的文件及資源路徑

    本文介紹了如何在Java中讀取resources下的文件以及獲取resource文件的路徑,通過使用ClassLoader或Class的getResourceAsStream方法,可以輕松地讀取resources目錄下的文件,感興趣的朋友跟隨小編一起看看吧
    2023-06-06
  • Spring Boot Shiro在Web應用中的作用詳解

    Spring Boot Shiro在Web應用中的作用詳解

    這篇文章主要為大家介紹了Spring Boot Shiro在Web應用中的作用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Druid基本配置及內(nèi)置監(jiān)控使用_動力節(jié)點Java學院整理

    Druid基本配置及內(nèi)置監(jiān)控使用_動力節(jié)點Java學院整理

    這篇文章主要介紹了Druid基本配置及內(nèi)置監(jiān)控使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Java動態(tài)代理四種實現(xiàn)方式詳解

    Java動態(tài)代理四種實現(xiàn)方式詳解

    這篇文章主要介紹了Java四種動態(tài)代理實現(xiàn)方式,對于開始學習java動態(tài)代理或者要復習java動態(tài)代理的朋友來講很有參考價值,有感興趣的朋友可以參考一下
    2021-04-04

最新評論