哈嘍,各位小伙伴們,你們好呀,我是喵手。運營社區:C站/掘金/騰訊云;歡迎大家常來逛逛
??今天我要給大家分享一些自己日常學習到的一些知識點,并以文字的形式跟大家一起交流,互相學習,一個人雖可以走的更快,但一群人可以走的更遠。
??我是一名后端開發愛好者,工作日常接觸到最多的就是Java語言啦,所以我都盡量抽業余時間把自己所學到所會的,通過文章的形式進行輸出,希望以這種方式幫助到更多的初學者或者想入門的小伙伴們,同時也能對自己的技術進行沉淀,加以復盤,查缺補漏。
小伙伴們在批閱的過程中,如果覺得文章不錯,歡迎點贊、收藏、關注哦。三連即是對作者我寫作道路上最好的鼓勵與支持!
哈嘍,各位小伙伴們,你們好呀,我是喵手。
??今天我要給大家分享一些自己日常學習到的一些知識點,并以文字的形式跟大家一起交流,互相學習,一個人雖可以走的更快,但一群人可以走的更遠。
??我是一名后端開發愛好者,工作日常接觸到最多的就是Java語言啦,所以我都盡量抽業余時間把自己所學到所會的,通過文章的形式進行輸出,希望以這種方式幫助到更多的初學者或者想入門的小伙伴們,同時也能對自己的技術進行沉淀,加以復盤,查缺補漏。
小伙伴們在批閱的過程中,如果覺得文章不錯,歡迎點贊、收藏、關注哦。三連即是對作者我寫作道路上最好的鼓勵與支持!
前言
在Java開發中,日期時間的處理一直是一個比較困難的問題。為了方便開發者對日期時間做格式化和解析,Java提供了SimpleDateFormat類,可以輕松地完成各種日期時間格式的轉化。
摘要
SimpleDateFormat類是Java提供的一個日期時間格式化類,它可以將日期時間轉化為指定格式的字符串,或者將字符串解析為日期時間。SimpleDateFormat類可以對日期時間進行各種格式化處理,比如將日期時間格式化為"yyyy-MM-dd HH:mm:ss"、"yyyy年MM月dd日"等格式。
SimpleDateFormat類
簡介
SimpleDateFormat類位于java.text包中,它繼承自DateFormat抽象類。DateFormat是一個日期時間格式化抽象類,而SimpleDateFormat則是DateFormat的實現類之一,它通過模式字符串來定義日期時間的格式。
SimpleDateFormat類的構造方法有兩個,其中一個是默認構造方法,另一個是根據指定的模式字符串創建SimpleDateFormat對象。通過設置不同的模式字符串,SimpleDateFormat類可以支持各種日期時間格式的轉化。
源代碼解析
SimpleDateFormat類的源代碼比較復雜,但核心代碼可以分為兩部分:構造方法和格式化/解析方法。
構造方法
SimpleDateFormat類有兩個構造方法,其中一個是默認構造方法,另一個是根據指定的模式字符串創建SimpleDateFormat對象。下面是根據模式字符串創建SimpleDateFormat對象的構造方法:
public SimpleDateFormat(String pattern) {this(pattern, Locale.getDefault(Locale.Category.FORMAT));
}
該構造方法通過傳入的模式字符串pattern和默認Locale對象來創建SimpleDateFormat對象。Locale對象表示了一個特定的語言環境,用于控制日期時間的格式化和解析。通過設置不同的Locale對象,SimpleDateFormat類可以支持各種語言地區的日期時間格式。下面是一個示例:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
System.out.println(sdf.format(new Date()));
格式化/解析方法
SimpleDateFormat類提供了兩種方法:格式化方法和解析方法。格式化方法將日期時間轉化為指定格式的字符串,解析方法則將字符串解析為日期時間。下面是SimpleDateFormat類的兩個核心方法:
-
格式化方法
SimpleDateFormat類的格式化方法為format(),它用于將日期時間格式化為指定格式的字符串。下面是一個示例:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println(sdf.format(new Date()));
在這個示例中,我們創建了一個SimpleDateFormat對象sdf,它的模式字符串為"yyyy-MM-dd HH:mm:ss",然后通過format()將當前日期時間格式化為指定格式的字符串。
-
解析方法
SimpleDateFormat類的解析方法為parse(),它用于將字符串解析為日期時間。下面是一個示例:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = sdf.parse("2022-01-01 12:00:00");System.out.println(date);
在這個示例中,我們創建了一個SimpleDateFormat對象sdf,它的模式字符串為"yyyy-MM-dd HH:mm:ss",然后通過parse()將字符串"2022-01-01 12:00:00"解析為日期時間。
應用場景案例
SimpleDateFormat類的應用場景非常廣泛。在實際開發中,我們經常需要將日期時間格式化為指定格式的字符串,或者將字符串解析為日期時間。下面是一些使用SimpleDateFormat類的應用場景:
- 將日期時間格式化為指定格式的字符串。比如,將日期時間格式化為"yyyy-MM-dd"、"yyyy年MM月dd日"等格式。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");System.out.println(sdf.format(new Date())); SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");System.out.println(sdf.format(new Date()));
- 將字符串解析為日期時間。比如,將字符串"2022-01-01"、"2022年01月01日"等解析為Date對象。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date date = sdf.parse("2022-01-01");System.out.println(date); // 輸出格式為:Sat Jan 01 00:00:00 CST 2022SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");Date date = sdf.parse("2022年01月01日");System.out.println(date); // 輸出格式為:Sat Jan 01 00:00:00 CST 2022
優缺點分析
優點
- 簡單易用。SimpleDateFormat類提供了簡單易用的API,通過設置不同的模式字符串就可以完成各種日期時間格式的轉化。
- 支持各種語言地區。SimpleDateFormat類可以通過設置不同的Locale對象來支持各種語言地區的日期時間格式。這在國際化開發中非常有用。
缺點
- 線程不安全。SimpleDateFormat類是線程不安全的,如果多個線程同時訪問同一個SimpleDateFormat對象,可能會導致日期時間格式混亂。
- 性能較差。SimpleDateFormat類的性能較差,特別是對于頻繁調用的場景,可能會對程序性能產生影響。
類代碼方法介紹
SimpleDateFormat類的常用方法如下:
方法名 | 描述 |
---|---|
SimpleDateFormat(String pattern) | 根據指定的模式字符串創建一個SimpleDateFormat對象。 |
format(Date date) | 將指定日期格式化為字符串。 |
parse(String source) | 將指定字符串解析為日期。 |
setLenient(boolean lenient) | 指定解析時是否嚴格按照模式字符串進行解析,默認為寬松解析。 |
setTimeZone(TimeZone zone) | 指定時區。 |
toLocalizedPattern() | 返回本地化的模式字符串。 |
toPattern() | 返回模式字符串。 |
clone() | 克隆當前SimpleDateFormat對象。 |
測試用例
下面是一個針對SimpleDateFormat類的測試用例,我們可以通過該測試用例來驗證SimpleDateFormat類的各種功能是否正常。
測試代碼演示
package com.example.javase.se.classes;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;/*** @Author ms* @Date 2023-11-03 23:08*/
public class SimpleDateFormatTest {public static void main(String[] args) throws Exception {// 測試格式化方法SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH時mm分ss秒");System.out.println(sdf1.format(new Date()));System.out.println(sdf2.format(new Date()));// 測試解析方法SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy年MM月dd日");Date date1 = sdf3.parse("2023-01-01");Date date2 = sdf4.parse("2023年01月01日");System.out.println(date1);System.out.println(date2);// 測試設置Locale對象SimpleDateFormat sdf5 = new SimpleDateFormat("yyyy年MM月dd日", Locale.US);System.out.println(sdf5.format(new Date()));// 測試設置時區SimpleDateFormat sdf6 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");sdf6.setTimeZone(TimeZone.getTimeZone("GMT+8"));System.out.println(sdf6.format(new Date()));// 測試寬松解析SimpleDateFormat sdf7 = new SimpleDateFormat("yyyy-MM-dd");sdf7.setLenient(false);try {Date date3 = sdf7.parse("2023-02-30");} catch (Exception e) {System.out.println("解析失敗:" + e.getMessage());}}
}
通過執行以上測試用例,我們可以驗證SimpleDateFormat類的各種功能是否正常。例如,我們可以測試格式化方法和解析方法是否能夠正確轉化日期時間,是否能夠根據不同的Locale對象支持各種語言格式,是否能夠通過設置時區改變日期時間的顯示,以及是否能夠通過設置寬松解析來處理非法日期時間等等。
測試結果
??根據如上測試用例,本地測試結果如下,僅供參考,你們也可以自行修改測試用例或者添加更多的測試數據或測試方法,進行熟練學習以此加深理解。
測試代碼分析
??根據如上測試用例,在此我給大家進行深入詳細的解讀一下測試代碼,以便于更多的同學能夠理解并加深印象。
該代碼主要是對 Java 的 SimpleDateFormat 類進行測試和演示,主要包括以下幾個方面:
-
測試格式化方法:創建 SimpleDateFormat 對象,并指定要格式化的日期格式,使用 format 方法將 Date 對象按照指定格式輸出。
-
測試解析方法:創建 SimpleDateFormat 對象,并指定要解析的日期格式,使用 parse 方法將字符串轉化為對應的 Date 對象。
-
測試設置 Locale 對象:在創建 SimpleDateFormat 對象時,可以傳入一個 Locale 對象,用于指定輸出的語言環境。
-
測試設置時區:通過 setTimezone 方法,可以設置 SimpleDateFormat 使用指定的時區進行日期格式化和解析。
-
測試寬松解析:通過 setLenient 方法,可以設置 SimpleDateFormat 在解析日期時是否嚴格匹配指定格式,如果不嚴格匹配,則會自動調整日期。
… …
文末
好啦,以上就是我這期的全部內容,如果有任何疑問,歡迎下方留言哦,咱們下期見。
… …
學習不分先后,知識不分多少;事無巨細,當以虛心求教;三人行,必有我師焉!!!
wished for you successed !!!
??若喜歡我,就請關注我叭。
??若對您有用,就請點贊叭。
??若有疑問,就請評論留言告訴我叭。
… …
文末
好啦,以上就是我這期的全部內容,如果有任何疑問,歡迎下方留言哦,咱們下期見。
… …
學習不分先后,知識不分多少;事無巨細,當以虛心求教;三人行,必有我師焉!!!
wished for you successed !!!
??若喜歡我,就請關注我叭。
??若對您有用,就請點贊叭。
??若有疑問,就請評論留言告訴我叭。