Java工具類——日期相關的類

来源:https://www.cnblogs.com/yychuyu/archive/2020/06/28/13204602.html
-Advertisement-
Play Games

前言 在日常的開發工作當中,我們經常需要用到日期相關的類(包括日期類已經處理日期的類),所以,我就專門整理了一篇關於日期相關的類,希望可以幫助到大家。 正文 一、日期類介紹 在 Java 裡面,操作日期的類主要有以下幾個類: 工具類 所屬包 繼承關係 實現介面 Date類 java.util包,需要 ...


前言

在日常的開發工作當中,我們經常需要用到日期相關的類(包括日期類已經處理日期的類),所以,我就專門整理了一篇關於日期相關的類,希望可以幫助到大家。

正文

一、日期類介紹

在 Java 裡面,操作日期的類主要有以下幾個類:

工具類 所屬包 繼承關係 實現介面
Date類 java.util包,需要導包 預設繼承Object Serializable, Cloneable, Comparable
SimpleDateFormat類 java.text包,需要導包 繼承DateFormat Serializable, Cloneable
Calendar類 java.util包,需要導包 預設繼承Object Serializable, Cloneable, Comparable

二、Date類

這是最基礎的一個日期類,其中Date類重名的有4個相關的類,這四個類所屬的包都不相同,這裡我們講的是位於java.util包下的 Date 類。

1、構造方法

Date 類有6個構造方法,其中後面5個帶有 @Deprecated 註解的都已經廢棄了(不推薦用),主要用的是前面2個構造方法。

public Date()
public Date(long date) 
@Deprecated
public Date(String s)
@Deprecated
public Date(int year, int month, int date)
@Deprecated
public Date(int year, int month, int date, int hrs, int min)
@Deprecated
public Date(int year, int month, int date, int hrs, int min, int sec)

既然有構造方法,其實我們可以通過new關鍵字實例化對象來獲取時間,通過源碼我們可以發現,無參構造方法其實是用了 System.currentTimeMillis() 方法獲取當前系統時間然後通過方法調用將此時間傳遞給了 long 型有參方法進行私有成員變數賦值。

public Date() {
    this(System.currentTimeMillis());
}
public Date(long date) {
    fastTime = date;
}
//返回當前系統時間與電腦元年()之間的毫秒值的差值
//電腦元年:1970-1-1 00:00:00
//中國時間差8個小時
long l = System.currentTimeMillis();
System.out.println(l);//1587349600847

我們可以看到輸出 Date 輸出的格式是一個很奇怪的格式,不應該是 hashCode碼 嗎?其實不是,因為 Date 類重寫了 Object 的toString()方法,然後日期的格式是根據美國人的格式來命名輸出的,所以有點奇怪。

  //輸出格式叫格格林威治時間格式
  Date date = new Date();
  System.out.println(date);//Mon Apr 20 10:33:49 CST 2020
//Date time = new Date("");

2、常用方法

Date 類裡面的方法也大部分都是廢棄的,不建議使用的,所以就介紹幾個常用的方法

  • before()方法,判斷一個時間是否在另外一個時間之前,返回值是boolean類型的。
Date date1 = new Date(1587350029179L);//前面時間
Date date2 = new Date(1587350029192L);//後面時間
boolean before = date1.before(date2);//判斷date1的時間是否在date2之前
System.out.println(before);//true
  • after()方法,判斷一個時間是否在另外一個時間之後,返回值是boolean類型的。
Date date1 = new Date(1587350029179L);//前面時間
Date date2 = new Date(1587350029192L);//後面時間
boolean after = date1.after(date2);//判斷date1的時間是否在date2之後
System.out.println(after);//false

三、日期格式化類—SimpleDateFormat類

現在我們通過上面講的日期類,可以操作時間了,但是時間的輸出格式是格林威治時間,時間格式很不直觀,而且還很奇怪,那麼有沒有什麼辦法可以去上輸出的時間變成我們常見的年月日時分秒的時間格式呢?答案當然是可以,Jdk 給我們提供了操作時間格式的工具類 DateFormat,但是我們看源碼發現,如圖所示

public abstract class DateFormat extends Format{}

此類其實是一個抽象類,我們都知道,抽象類是不能通過構造方法創建對象,不能實例化的,通俗的講就是不能做事情的,那麼我們可以找抽象類的子類,然後幫我們去格式化Date日期,這個類就是SimpleDateFormat類。

1、構造方法

SimpleDateFormat 類有4個構造方法,如下方代碼:

public SimpleDateFormat(){}
public SimpleDateFormat(String pattern){}
public SimpleDateFormat(String pattern, Locale locale){}
public SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols){}

下麵這張圖表示了日期的模式,其中大寫的M表示一年中的第幾月,小寫的m表示時分秒的分;大寫的D是一年當中的第幾天,小寫的d是一個月中的第幾天;大寫的H表示Hour in day (0-23),小寫的h Hour in am/pm (1-12);大寫的S表示毫秒,小寫的s表示秒,每個具體的含義可以參考下圖:

2、常用方法

  • format()方法,按照指定的格式模式格式化日期,返回一個日期字元串
DateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf1.format(new Date()));//2020-04-20 11:40:18
  • parse()方法,利用給定的參數-日期字元串來轉成時間格式,返回Date對象。
DateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = "2012-10-20";
Date parse = null;
try {
  parse = sdf1.parse(dateStr);
  System.out.println(parse);//Sat Oct 20 00:00:00 CST 2012
} catch (ParseException e) {
  e.printStackTrace();
}

四、Calendar類

由於 Date 類裡面的很多方法都是廢棄了的(JDK不建議我們使用),Date 不能只操作年或月或日,所以就出現了Calendar 類,Calendar英文單詞是日曆的意思,Calendar 類雖然也是一個抽象類,但是可以 getInstance()方法獲得 Calendar 對象,

public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar> {}

其實你可以這樣理解,Calendar類是Date類的加強版(升級版),Date類可以做的事情,Calendar類都能做。

1、構造方法

Calendar類的兩個構造方法都是protected關鍵字修飾的,是訪問不到的,只有子類才可以訪問

protected Calendar(){}
protected Calendar(TimeZone zone, Locale aLocale){}

2、常用方法

  • getInstance()方法,一般通過此方法創建Calendar對象,該方法的作用是獲取當前系統時間的Calendar對象。
Calendar calendar = Calendar.getInstance();
  • setTime()方法,使用給定的Date設置日曆的時間。

  • getTime()方法,獲取時間日期,返回一個Date

Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());//Mon Apr 20 13:48:10 CST 2020
  • get()方法,獲取年月日時分秒單項日期信息。

  • getTimeZone()方法,獲取時區操作對象
Calendar calendar = Calendar.getInstance();
TimeZone timeZone = calendar.getTimeZone();
System.out.println(timeZone.getID());//Asia/Shanghai
System.out.println(timeZone.getDisplayName());//中國標準時間

五、小結

以上就是我關於日期相關類的總結,小伙伴們如果有任何問題歡迎留言哦~~

持續更新,未完待續……

公眾號:良許Linux

有收穫?希望老鐵們來個三連擊,給更多的人看到這篇文章


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在Windows Form平臺下實現視窗跳轉,常見的有以下幾種方式,比如通過Show/ShowDialog方法顯示新的視窗,通過多文檔界面(MDI)在父視窗中載入子視窗,或者是通關過在視窗中動態載入自定義控制項,比如通過將視窗中的Panel控制項作為容器,將一些自定義元素作為視圖界面控制項,動態載入到Pa ...
  • 標記幫助程式是什麼 標記幫助程式使伺服器端代碼可以在 Razor 文件中參與創建和呈現 HTML 元素。 例如,內置的 ImageTagHelper 可以將版本號追加到圖片名稱。 每當圖片發生變化時,伺服器都會為圖像生成一個新的唯一版本號,因此客戶端總能獲得當前圖像(而不是過時的緩存圖像)。 作者: ...
  • 一:背景 1. 講故事 .NET 5 終於在 6月25日 發佈了第六個預覽版,隨之而來的是更多的新特性加入到了 C# 9 Preview 中,這個系列也可以繼續往下寫了,廢話不多說,今天來看一下 Top-level programs 和 Extending Partial Methods 兩大新特性 ...
  • 使用 nuget server 的 API 來實現搜索安裝 nuget 包 ...
  • 資料庫管理系統 資料庫管理系統(Database Management System)是一種操縱和管理資料庫的大型軟體,用於建立、使用和維護資料庫,簡稱DBMS。它對資料庫進行統一的管理和控制,以保證資料庫的安全性和完整性。用戶通過DBMS訪問資料庫中的數據,資料庫管理員也通過DBMS進行資料庫的維 ...
  • Harbor介紹與安裝部署,並實現通過http和https協議【自簽發SSL證書】訪問,客戶端如何通過Harbor鏡像倉庫實現鏡像的上傳【推送】與下載【拉取】。 ...
  • 1.fish@ubuntu:~/linux$ fish 代表用戶名 ubuntu 代表機器名 ~ 代表家目錄 ~/linux 當前所在目錄 $ 代表普通用戶 root@ubuntu:/home/python# 管理員對應是#符號 2.回到家目錄的方式 cd cd ~ $HOME 環境變數代表的是家目 ...
  • 1. 認識Linux系統目錄結構 /bin 可執行文件所在目錄 /media 掛載設備媒體,u盤,光碟機等 /mnt 該目錄主要是為了讓用戶掛在別的文件系統(掛在自己的u盤) /usr unix system resources,龐大和複雜的目錄,很多應用會安裝到此目錄(/usr/local-用戶自己 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...