我們可能希望按著某種習(xí)慣來(lái)輸出時(shí)間,比如時(shí)間的順序:年 月 星期 日或者年 月 星期 日 小時(shí) 分 秒。
Java早期使用java.text包中的DateFormat的子類SimpleDateFormat來(lái)實(shí)現(xiàn)日期的格式化,JDK 1.5版本提供了更為方便的Formatter類,F(xiàn)ormatter類的format方法格式如下:
format(格式化模式,日期列表)
按著“格式化模式”返回“日期列表”中所列各個(gè)日期中所含數(shù)據(jù)(年,月,日,小時(shí)等數(shù)據(jù))的字符串表示。
目前,Java已經(jīng)將format方法作為了String類的靜態(tài)方法,因此,程序可以直接使用String類調(diào)用format方法對(duì)日期進(jìn)行格式化。
1.格式化模式
format方法中的“格式化模式”是一個(gè)用雙引號(hào)括起的字符序列,也就是字符串,該字符序列中的字符由時(shí)間格式符和普通字符所構(gòu)成。
例如:"日期:%ty-%tm-%td"中的%ty,%tm和%td等都是時(shí)間格式符,開(kāi)始的2個(gè)漢字(“日”和“期”)、冒號(hào)、格式符之間的連接字符“-”都是普通字符,通俗點(diǎn)說(shuō)就是,不是時(shí)間格式符的都被認(rèn)為是普通字符。
比如:格式符%ty、%tm和%td將分別表示日期中的“年”、“月”和“日”。
format方法返回的字符串就是“格式化模式”中的時(shí)間格式符被替換為它得到的格式化結(jié)果后的字符串,例如:
String s = String.format("%tY年%tm月%td日",new Date(),new Date(),new Date());
2.日期列表
format方法中的“日期列表”可以是用逗號(hào)分隔的Calendar對(duì)象或Date對(duì)象。
我們要保證format方法“格式化模式”中的格式符的個(gè)數(shù)與“日期列表”中列出的日期個(gè)數(shù)相同。
format方法默認(rèn)按從左到右的順序使用“格式化模式”中的格式符來(lái)格式“日期列表”中對(duì)應(yīng)的日期,而“格式化模式”中的普通字符保留原樣。
3.格式化同一日期
我們希望用幾個(gè)格式符號(hào)格式“日期列表”中的同一個(gè)日期,可以在“格式化模式”中使用“<”,比如:"%ty-%<tm-%<td"中的三個(gè)格式符將格式化同一日期,即含有“<”的格式符和它前面的格式符格式同一個(gè)日期,例如:
String s = String.format("%ty年%<tm月%<td日",new Date());
常用的日期格式符:
日期格式符 | 作用 |
%tY | 將日期中的“年”格式化為4位形式,例如:2000 |
%ty | 將日期中的“年”格式化為2位形式,帶前導(dǎo)零,例如:01 |
%tm | 將日期中的“月”格式化為2位形式,帶前導(dǎo)零,即01~13,其中“01”是一年的第一個(gè)月,“13”是支持陰歷所需的一個(gè)特殊值 |
%tp | 將日期中的“日”格式化為當(dāng)前環(huán)境下上午或下午的表示格式,例如:am或pm |
%td | 將日期中的“日”格式化為當(dāng)前月中的天,帶前導(dǎo)零,即01~31,其中“01”是一個(gè)月的第一天 |
%tj | 將日期中的“日”格式化為當(dāng)年的天數(shù),帶前導(dǎo)零,即001~365,“001”是一年的第一天 |
%tB | 將日期中的“月”格式化為當(dāng)前環(huán)境下的月份全稱,例如:January |
%tb | 將日期中的“月”格式化為當(dāng)前環(huán)境下的月份簡(jiǎn)稱,例如:Jan |
%tA | 將日期中的“日”格式化為當(dāng)前環(huán)境下的星期幾的全稱,例如:Monday |
%ta | 將日期中的“日”格式化為當(dāng)前環(huán)境下的星期幾的簡(jiǎn)稱,例如:Mon |
%tH | 將日期中的“時(shí)”格式化為2位形式,帶前導(dǎo)零,24小時(shí)制,即00~23 |
%tI | 將日期中的“時(shí)”格式化為2位形式,帶前導(dǎo)零,12小時(shí)制,即01~12 |
%tM | 將日期中的“分”格式化為2位形式,帶前導(dǎo)零,即00~60,60是支持閏秒所需的一個(gè)特殊值 |
%tS | 將日期中的“秒”格式化為2位形式,帶前導(dǎo)零,即00~60 |
%tL | 將日期中秒的“毫秒”格式化為3位形式,帶前導(dǎo)零,即000~999 |
%tN | 將日期中毫秒的“微秒”格式化為9位形式,帶前導(dǎo)零,即000000000~999999999 |
%tz | 將日期與GMT(格林威治時(shí)間)的偏移量格式化為4位形式,例如:+0800 |
%tZ | 將日期所在時(shí)區(qū)的名稱格式化為標(biāo)準(zhǔn)縮寫,例如:CST |
%tR | 等價(jià)于%tH:%tM |
%tT | 等價(jià)于%tH:%tM:%S |
%tr | 等價(jià)于%tI:%tM:%tS%Tp(上午或下午標(biāo)記%Tp的位置可能與地區(qū)有關(guān)) |
%tD | 等價(jià)于%tm/%td/%ty |
%tF | 等價(jià)于"%tY-%tm-%td" |
%tc | 等價(jià)于"%ta %tb %td %tT %tZ %tY",例如:“星期日 二月 12 20:02:32 CST 2012” |
C語(yǔ)言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會(huì)寫的:零基礎(chǔ)C語(yǔ)言學(xué)練課程
解決困擾你多年的C語(yǔ)言疑難雜癥特性的C語(yǔ)言進(jìn)階課程
從零到寫出一個(gè)爬蟲(chóng)的Python編程課程
只會(huì)語(yǔ)法寫不出代碼?手把手帶你寫100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程