Java開發者必知的時間處理工具:SimpleDateFormat類詳解

哈嘍,各位小伙伴們,你們好呀,我是喵手。運營社區: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類的兩個核心方法:

  1. 格式化方法

    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()將當前日期時間格式化為指定格式的字符串。

  1. 解析方法

    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類的應用場景:

  1. 將日期時間格式化為指定格式的字符串。比如,將日期時間格式化為"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())); 
  1. 將字符串解析為日期時間。比如,將字符串"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

優缺點分析

優點

  1. 簡單易用。SimpleDateFormat類提供了簡單易用的API,通過設置不同的模式字符串就可以完成各種日期時間格式的轉化。
  2. 支持各種語言地區。SimpleDateFormat類可以通過設置不同的Locale對象來支持各種語言地區的日期時間格式。這在國際化開發中非常有用。

缺點

  1. 線程不安全。SimpleDateFormat類是線程不安全的,如果多個線程同時訪問同一個SimpleDateFormat對象,可能會導致日期時間格式混亂。
  2. 性能較差。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 類進行測試和演示,主要包括以下幾個方面:

  1. 測試格式化方法:創建 SimpleDateFormat 對象,并指定要格式化的日期格式,使用 format 方法將 Date 對象按照指定格式輸出。

  2. 測試解析方法:創建 SimpleDateFormat 對象,并指定要解析的日期格式,使用 parse 方法將字符串轉化為對應的 Date 對象。

  3. 測試設置 Locale 對象:在創建 SimpleDateFormat 對象時,可以傳入一個 Locale 對象,用于指定輸出的語言環境。

  4. 測試設置時區:通過 setTimezone 方法,可以設置 SimpleDateFormat 使用指定的時區進行日期格式化和解析。

  5. 測試寬松解析:通過 setLenient 方法,可以設置 SimpleDateFormat 在解析日期時是否嚴格匹配指定格式,如果不嚴格匹配,則會自動調整日期。

… …

文末

好啦,以上就是我這期的全部內容,如果有任何疑問,歡迎下方留言哦,咱們下期見。

… …

學習不分先后,知識不分多少;事無巨細,當以虛心求教;三人行,必有我師焉!!!

wished for you successed !!!


??若喜歡我,就請關注我叭。

??若對您有用,就請點贊叭。

??若有疑問,就請評論留言告訴我叭。

… …

文末

好啦,以上就是我這期的全部內容,如果有任何疑問,歡迎下方留言哦,咱們下期見。

… …

學習不分先后,知識不分多少;事無巨細,當以虛心求教;三人行,必有我師焉!!!

wished for you successed !!!


??若喜歡我,就請關注我叭。

??若對您有用,就請點贊叭。

??若有疑問,就請評論留言告訴我叭。

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

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

相關文章

使用兩塊ESP8266實現ESP-NOW通信

ESP-NOW簡介 ESP-NOW是Espressif開發的一種基于Wi-Fi的低功耗通信協議。與傳統Wi-Fi通信不同,ESP-NOW不需要配對過程,設備間可以直接通信,非常適合需要快速傳輸小數據包的應用,如傳感器網絡、遙控器和智能家居設備。它的優勢在于…

小紅書云原生 Kafka 技術剖析:分層存儲與彈性伸縮

面對 Kafka 規模快速增長帶來的成本、效率和穩定性挑戰時,小紅書大數據存儲團隊采取云原生架構實踐:通過引入冷熱數據分層存儲、容器化技術以及自研的負載均衡服務「Balance Control」,成功實現了集群存儲成本的顯著降低、分鐘級的集群彈性遷…

[圖解]SysML和EA建模住宅安全系統-07 to be塊定義圖

1 00:00:01,970 --> 00:00:05,040 入侵者這里有個∞ 2 00:00:05,530 --> 00:00:07,000 說明它下面已經有子圖了 3 00:00:07,010 --> 00:00:08,080 我們看看里面子圖 4 00:00:10,200 --> 00:00:17,000 這里,我們看位置 5 00:00:19,030 --> 00:00:…

Vitis HLS 學習筆記--抽象并行編程模型-不良示例

目錄 1. 簡介 2. 基礎 kernel 2.1 pass kernel 2.2 double_pass kernel 2.3 add_kernel 2.4 split kernel 3. 三種bypass 3.1 input_bypass 3.2 middle_bypass 3.3 output_bypass 4. 總結 1. 簡介 本文展示三個在數據流水線中常見的問題: 輸入參數繞過…

python中模擬鍵盤按鍵和鼠標按鍵

目錄 0.作用和需安裝庫 1.模擬鍵盤按鍵 2.虛擬鍵表 3.模擬鼠標 0.作用和需安裝庫 作用:用程序實現達到按下鍵盤按鍵的作用,或者按下鼠標,無需真正按鍵盤或者鼠標。 需要安裝pywin32這個庫 pip install pywin32 1.模擬鍵盤按鍵 例子1…

在Mac OS下編寫第一個Flask代碼

在電腦上已經安裝了Homebrew,在Homebrew里已經安裝了Python。 創建一個新的Flask應用。這里發生了幾件事: 創建虛擬環境: 你使用python3 -m venv flask創建了一個名為flask的虛擬環境。激活虛擬環境: 通過運行source flask/bin/ac…

chatgpt線性差值 將直線漸變顏色

color(x)(x-x1)/(x2-x1) 與gpt給出的 這個位置比例可以表示為d/L是概念相同 x-x1是計算當前點距離起點距離,x2-x1是計算長度 例如,如果我們在直線上距離起點A的距離為d,整條直線的長度為L 用數學方式解釋 2024/5/25 18:54:30 當我們要在一…

vue+echart :點擊趨勢圖中的某一點或是柱狀圖,出現彈窗,并傳輸數據

樣式 在趨勢圖中點擊某一個柱狀圖,出現下面的彈窗 代碼實現 主要是在趨勢圖頁面代碼中,在初始化趨勢圖的設置中,添加對趨勢圖監聽的點擊方法 drawChart() {const chartData this.chartData;let option {};if (!chartData.xData?.len…

Swift 類和結構體

類和結構體 一、結構體和類對比1、類型定義的語法2、結構體和類的實例3、屬性訪問4、結構體類型的成員逐一構造器 二、結構體和枚舉是值類型三、類是引用類型1、恒等運算符2、指針 結構體和類作為一種通用而又靈活的結構,成為了人們構建代碼的基礎。你可以使用定義常…

python mp3轉mp4工具

成品UI 安裝moviepy庫 pip install moviepy 轉換demo from moviepy.editor import *# 創建一個顏色剪輯,時長與音頻相同 audioclip AudioFileClip(r"C:\Users\Administrator\PycharmProjects\pythonProject44\test4\趙照 - 燈塔守望人.mp3") videoclip…

node-nass安裝踩坑

編譯DSS的前端,用1.1.4編譯,沒有問題,用1.1.1版本就有問題,一直是node-gyp有問題,怎么也解決了不了。 后來檢查發現,是因為要安裝node-nass才導致出現node-gyp的問題。 而1.1.4沒問題,是因為我…

頭歌c語言實驗答案

由于頭歌C語言實驗的具體內容和題目可能隨時間變化,我無法直接提供特定實驗的完整答案。但我可以基于參考文章中的內容和結構,給出一個通用的回答格式,并結合相關信息進行說明。 通用回答格式 實驗名稱和描述 實驗名稱:頭歌C語言…

用Python Pygame做的一些好玩的小游戲

有些游戲的代碼比較長就不公布了 1.簡簡單單 1.瘋狂的雞哥 你要準備的圖片: 命名為:ji.png 代碼: import pygame import random as r pygame.init() pygame.display.set_caption(aaa) pm pygame.display.set_mode((800,600))class Ls(py…

Java進階學習筆記15——接口概述

認識接口: Java提供了一個關鍵字Interface,用這個關鍵字我們可以定義一個特殊的結構:接口。 接口不能創建對象。 注意:接口不能創建對象,接口是用來被類實現(implements)的,實現接口…

中國電子學會(CEIT)2023年05月真題C語言軟件編程等級考試三級(含詳細解析答案)

中國電子學會(CEIT)考評中心歷屆真題(含解析答案) C語言軟件編程等級考試三級 2023年05月 編程題五道 總分:100分一、找和為K的兩個元素(20分) 在一個長度為n (n < 1000)的整數序列中,判斷是否存在某兩個元素之和為k。 時間限制: 1000 內存限制: 65536 輸入 …

基于Spring Boot的高校圖書館管理系統

項目和論文都有企鵝號2583550535 基于Spring Boot的圖書館管理系統||圖書管理系統_嗶哩嗶哩_bilibili 第1章 緒論... 1 1.1 研究背景和意義... 1 1.2 國內外研究現狀... 1 第2章 相關技術概述... 2 2.1 后端開發技術... 2 2.1.1 SpringBoot 2 2.1.2 MySQL.. 2 2.1.3 My…

unity中如何插入網頁

在Unity中插入自己的網頁通常是通過使用Unity的WebGL構建目標和HTML頁面來實現的。以下是一些步驟&#xff1a; 構建你的Unity項目為WebGL&#xff1a;在Unity中&#xff0c;選擇Build Settings&#xff08;構建設置&#xff09;&#xff0c;將Platform&#xff08;平臺&#x…

vr商品全景展示場景編輯軟件的優點

3D模型展示網站搭建編輯器以強大的3D編輯引擎和逼真的渲染效果&#xff0c;讓您輕松實現模型展示的優化。讓用戶通過簡單的操作&#xff0c;就能滿足個人/設計師/商戶多樣化展示的需求&#xff0c;讓您的模型成為獨一無二的杰作。 3D模型展示網站搭建編輯器采用國內領先的實時互…

java繼承使用細節二

構造器 主類是無參構造器時會默認調用 public graduate() {// TODO Auto-generated constructor stub也就是說我這里要用構造器會直接調用父類。它是默認看不到的 &#xff0c;System.out.println("graduate");} 但當主類是有參構造器如 public father_(int s,doubl…

c語言:將小寫字母轉換為大寫字母

//將小寫字母轉換為大寫字母 #include <stdio.h> #include <ctype.h> int main() { char arr[]"you are low"; int i0; while(arr[i]) { if(islower(arr[i])) { arr[i]arr[i]-32; } i; } printf("%s\n",arr); return 0; }