學習Java之如何對時間進行格式化
一. 時間模式字符串
在進行時間格式化之前,我們先來了解一下時間模式字符串。所謂的時間模式字符串,就是可以用來指定時間格式的一種模式,在此模式中,一些ASCII字母被保留為模式字母,具有特別的含義,如下表所示:
字母 | 描述 | 示例 |
---|---|---|
y | 四位年份 | 2020 |
M | 月份 | July or 07 |
d | 一個月的日期 | 10 |
h | A.M./P.M. (1~12)格式小時 | 12 |
H | 一天中的小時 (0~23) | 22 |
m | 分鐘數(shù) | 30 |
s | 秒數(shù) | 55 |
S | 毫秒數(shù) | 234 |
E | 星期幾 | Tuesday |
D | 一年中的日子 | 360 |
F | 一個月中第幾周的周幾 | 2 (second Wed. in July) |
w | 一年中第幾周 | 40 |
W | 一個月中第幾周 | 1 |
a | A.M.(上午)/P.M.(下午) | PM |
k | 一天中的小時(1~24) | 24 |
K | A.M./P.M. (0~11)格式小時 | 10 |
z | 時區(qū) | Eastern Standard Time |
' | 文字定界符 | Delimiter |
上面表格中的這些符號,我們盡量要記住,因為開發(fā)時經(jīng)常會用到這些符號。掌握了這些符號之后,我們就可以繼續(xù)學習日期與時間的格式化技能了。
二. printf()格式化方法
如果我們只是在項目的個別某個地方,想要簡單地實現(xiàn)日期時間的格式化,其實使用printf()方法就可以。printf()方法格式化時間和日期時,需要使用兩個字母進行格式化操作,一般是以 %t 開頭,且以下面表格中的某個字母結(jié)尾。
轉(zhuǎn) 換 符 | 說 明 | 示 例 |
---|---|---|
c | 包括全部日期和時間信息 | 星期六 十月 27 14:21:20 CST 2007 |
F | "年-月-日"格式 | 2007-10-27 |
D | "月/日/年"格式 | 10/27/07 |
r | "HH:MM:SS PM"格式(12時制) | 02:25:51 下午 |
T | "HH:MM:SS"格式(24時制) | 14:28:16 |
R | "HH:MM"格式(24時制) | 14:28 |
接下來我們通過一個案例來看看printf()方法是怎么進行格式化時間的。
import java.util.Date; /** * @author */ public class Demo07 { public static void main(String[] args) { // 初始化 Date 對象 Date date = new Date(); //c:全部日期和時間 System.out.printf("全部日期和時間信息:%tc%n", date); //f:年-月-日 System.out.printf("年-月-日的格式:%tF%n", date); //d:月/日/年 System.out.printf("月/日/年的格式:%tD%n", date); //r:HH:MM:SS PM System.out.printf("HH:MM:SS PM的格式(12時制):%tr%n", date); //t:HH:MM:SS格式(24時制) System.out.printf("HH:MM:SS的格式(24時制):%tT%n", date); //R:HH:MM格式(24時制) System.out.printf("HH:MM的格式(24時制):%tR", date); //用格式化字符串,指出要被格式化的參數(shù)索引,索引必須緊跟在%后面,而且必須以$結(jié)束 //使用toString()顯示日期和時間 System.out.printf("%1$s %2$tB %2$td, %2$tY","Due date:", date); } }
printf()方法進行格式化時,需要結(jié)合上表中的幾個符號。但是說實話,這種格式化方式并不是很常用,主要適用于少量的個別地方。如果我們的項目中有多處需要進行格式化的地方,盡量還是不要使用這種方式。因為如果你需要重復(fù)提供日期,利用這種方式來格式化時間就有點復(fù)雜,且不好進行后期的維護。
三. DateFormat類
其實我們在Java項目中對日期進行格式化,主要是利用一些日期格式化類,比如DateFormat及其子類。
1. 簡介
DateFormat是負責日期/時間格式化的抽象類,它可以用與語言無關(guān)的方式格式化并解析日期或時間。它的子類(如SimpleDateFormat)允許進行日期的格式化,將日期轉(zhuǎn)為文本;也可以進行文本的解析,將文本轉(zhuǎn)為日期。
我們在創(chuàng)建 DateFormat對象時不能使用 new關(guān)鍵字,要使用 DateFormat類中的getDateInstance()靜態(tài)方法,如下所示:
DateFormat df = DateFormat.getDatelnstance();
2. 靜態(tài)常量
DateFormat中給我們提供了幾個常用的靜態(tài)常量,用于方便我們進行格式化樣式的設(shè)置,如下所示:
- SHORT:純數(shù)字,如12.5.10 或 5:30pm;
- MEDIUM:較長,如May 10,2023;
- LONG:更長,如May 12,2023 或 11:15:32am;
- FULL:完全指定,如Tuesday、May 10、2022 AD 或 11:l5:42am CST。
3. 常用方法
我們在創(chuàng)建了一個DateFormat對象后,就可以使用該對象中的方法來對日期/時間進行格式化了,DateFormat中的常用方法如下表所示:
方法 | 描述 |
---|---|
String format(Date date) | 將 Date 格式化日期/時間字符串 |
Calendar getCalendar() | 獲取與此日期/時間格式相關(guān)聯(lián)的日歷 |
static DateFormat getDateInstance() | 獲取具有默認格式化風格和默認語言環(huán)境的日期格式 |
static DateFormat getDateInstance(int style) | 獲取具有指定格式化風格和默認語言環(huán)境的日期格式 |
static DateFormat getDateInstance(int style, Locale locale) | 獲取具有指定格式化風格和指定語言環(huán)境的日期格式 |
static DateFormat getDateTimeInstance() | 獲取具有默認格式化風格和默認語言環(huán)境的日期/時間格式 |
static DateFormat getDateTimeInstance(int dateStyle,int timeStyle) | 獲取具有指定日期/時間格式化風格和默認語言環(huán)境的日期/時間格式 |
static DateFormat getDateTimeInstance(int dateStyle,int timeStyle,Locale locale) | 獲取具有指定日期/時間格式化風格和指定語言環(huán)境的日期/時間格式 |
static DateFormat getTimeInstance() | 獲取具有默認格式化風格和默認語言環(huán)境的時間格式 |
static DateFormat getTimeInstance(int style) | 獲取具有指定格式化風格和默認語言環(huán)境的時間格式 |
static DateFormat getTimeInstance(int style, Locale locale) | 獲取具有指定格式化風格和指定語言環(huán)境的時間格式 |
void setCalendar(Calendar newCalendar) | 為此格式設(shè)置日歷 |
Date parse(String source) | 將給定的字符串解析成日期/時間 |
4. 基本使用
接下來我們通過一個案例來看看DateFormat的用法。這個案例,主要是給大家介紹DateFormat類的方法與靜態(tài)常量該如何使用,對日期進行不同風格的格式化。
import java.text.DateFormat; import java.util.Date; import java.util.Locale; /** * @author */ public class Demo08 { public static void main(String[] args) { // 獲取不同格式化風格和中國環(huán)境的日期 DateFormat df1 = DateFormat.getDateInstance(DateFormat.SHORT, Locale.CHINA); //DateFormat df2 = DateFormat.getDateInstance(DateFormat.FULL, Locale.CHINA); //DateFormat df3 = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.CHINA); //DateFormat df4 = DateFormat.getDateInstance(DateFormat.LONG, Locale.CHINA); // 將不同格式化風格的日期格式化為日期字符串 String date = df1.format(new Date()); // 獲取不同格式化風格和中國環(huán)境的時間 DateFormat df2 = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.CHINA); // 將不同格式化風格的時間格式化為時間字符串 String time = df2.format(new Date()); // 輸出日期和時間 System.out.println("SHORT格式:" + date+" "+time); } }
四. SimpleDateFormat類
1. 簡介
雖然我們已經(jīng)有了DateFormat,但有時候這個類并不能滿足我們的實際開發(fā)需求。此時我們可以進一步使用它的子類,比如SimpleDateFormat來進行更多的操作。
SimpleDateFormat是一個以與語言環(huán)境有關(guān)的方式來格式化和解析日期的具體類,它具有格式化(日期轉(zhuǎn)文本)、解析(文本轉(zhuǎn)日期)和規(guī)范化的功能。相對DateFormat來說,SimpleDateFormat具有更高的靈活性,可以讓我們選擇任何自定義的日期/時間格式,進行個性化設(shè)置。
2. 構(gòu)造方法
SimpleDateFormat是一個具體的子類,所以我們是可以通過new的方式來創(chuàng)建對象的。SimpleDateFormat類為我們提供了如下4個構(gòu)造方法:
- SimpleDateFormat():用默認的格式和語言環(huán)境,構(gòu)造一個SimpleDateFormat對象;
- SimpleDateFormat(String pattern):用指定的格式和默認的語言環(huán)境,構(gòu)造一個SimpleDateF ormat對象;
- SimpleDateFormat(String pattern,Locale locale):用指定的格式和指定的語言環(huán)境,構(gòu)造一個 SimpleDateFormat對象;
- SimpleDateFormat(String pattern,DateFormatSymbols formatSymbols):用指定的格式和指定的格式化語法來構(gòu)造一個SimpleDateFormat對象。
3. 自定義格式化常用字母
SimpleDateFormat自定義格式中常用的字母及含義如表 2 所示。
字母 | 含義 | 示例 |
---|---|---|
y | 年份。一般用 yy 表示兩位年份,yyyy 表示 4 位年份 | 使用 yy 表示的年扮,如 11; 使用 yyyy 表示的年份,如 2011 |
M | 月份。一般用 MM 表示月份,如果使用 MMM,則會根據(jù)語言環(huán)境顯示不同語言的月份 | 使用 MM 表示的月份,如 05; 使用 MMM 表示月份,在 Locale.CHINA 語言環(huán)境下,如“十月”;在 Locale.US 語言環(huán)境下,如 Oct |
d | 月份中的天數(shù)。一般用 dd 表示天數(shù) | 使用 dd 表示的天數(shù),如 10 |
D | 年份中的天數(shù)。表示當天是當年的第幾天, 用 D 表示 | 使用 D 表示的年份中的天數(shù),如 295 |
E | 星期幾。用 E 表示,會根據(jù)語言環(huán)境的不同, 顯示不同語言的星期幾 | 使用 E 表示星期幾,在 Locale.CHINA 語 言環(huán)境下,如“星期四”;在 Locale.US 語 言環(huán)境下,如 Thu |
H | 一天中的小時數(shù)(0~23)。一般用 HH 表示小時數(shù) | 使用 HH 表示的小時數(shù),如 18 |
h | 一天中的小時數(shù)(1~12)。一般使用 hh 表示小時數(shù) | 使用 hh 表示的小時數(shù),如 10 (注意 10 有 可能是 10 點,也可能是 22 點) |
m | 分鐘數(shù)。一般使用 mm 表示分鐘數(shù) | 使用 mm 表示的分鐘數(shù),如 29 |
s | 秒數(shù)。一般使用 ss 表示秒數(shù) | 使用 ss 表示的秒數(shù),如 38 |
S | 毫秒數(shù)。一般使用 SSS 表示毫秒數(shù) | 使用 SSS 表示的毫秒數(shù),如 156 |
4. 基本使用
接下來我們通過一個案例,來展示SimpleDateFormat的格式化和解析用法。
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * @author */ public class Demo09 { public static void main(String[] args) { //設(shè)置日期時間格式化模式,這個模式是根據(jù)需求自定義展示的,也可以是"yyyy年MM月dd日 E HH點 mm分 ss秒"等格式 SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //進行日期格式化 String date = format.format(new Date()); System.out.println("格式后的結(jié)果:" + date); try { //解析日期,將一個時間字符串解析為Date類型,這里有可能會產(chǎn)生解析異常 String time="2022-02-12 17:30:39"; Date date2 = format.parse(time); System.out.println("解析后的結(jié)果:" + date2); } catch (ParseException e) { e.printStackTrace(); } } }
在上述案例中,format()方法用于將Date格式化為String字符串,parse()方法用于將String字符串解析為Date類型。其中yyyy是完整的公元年,MM是月份,dd是日期,HH:mm:ss 是時、分、秒。這里有的格式大寫,有的格式小寫,例如MM是月份,mm是分,HH是24小時制,而hh則是12小時制。
五. 結(jié)語
至此,就把日期的格式化操作給大家講解完畢了。今天的內(nèi)容其實并不難,大家只需要把一些常用的構(gòu)造方式及方法、常量記一下即可。
以上就是學習Java之如何對時間進行格式化的詳細內(nèi)容,更多關(guān)于Java 時間格式化的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Linux中使用shell腳本管理Java應(yīng)用程序
在日常開發(fā)和運維工作中,管理基于Java的應(yīng)用程序是一項基礎(chǔ)且頻繁的任務(wù),本文將通過一個示例腳本,展示如何利用Shell腳本簡化這一流程,實現(xiàn)Java應(yīng)用的一鍵式啟動、停止與重啟操作,本腳本不僅提升了工作效率,還確保了操作的標準化與可靠性2024-06-06Java中FileWriter的用法及wirte()重載方法詳解
這篇文章主要介紹了Java中FileWriter的用法及wirte()重載方法詳解,FileWriter是Java編程語言中的一個類,用于將字符寫入文件,它提供了一種簡單而方便的方式來創(chuàng)建、打開和寫入文件,通過使用FileWriter,我們可以將字符數(shù)據(jù)寫入文本文件,需要的朋友可以參考下2023-10-10idea使用war以及war exploded的區(qū)別說明
本文詳細解析了war與warexploded兩種部署方式的差異及步驟,war方式是先打包成war包,再部署到服務(wù)器上;warexploded方式是直接把文件夾、class文件等移到Tomcat上部署,支持熱部署,開發(fā)時常用,文章分別列出了warexploded模式和war包形式的具體操作步驟2024-10-10Java Spring使用hutool的HttpRequest發(fā)送請求的幾種方式
文章介紹了Hutool庫中用于發(fā)送HTTP請求的工具,包括添加依賴、發(fā)送GET和POST請求的方法,以及GET請求的不同參數(shù)傳遞方式,感興趣的朋友跟隨小編一起看看吧2024-11-11