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