格式化日期表示將日期/時間格式轉換為預先定義的日期/時間格式。例如將日期“Fri May 18 15:46:24 CST2016” 格式轉換為 “2016-5-18 15:46:24 星期五”的格式。
在 Java 中,可以使用 DateFormat 類和 SimpleDateFormat 類來格式化日期,下面詳細介紹這兩個格式化日期類的使用。
DateFormat 類
DateFormat 是日期/時間格式化子類的抽象類,它以與語言無關的方式格式化並解析日期或時間。日期/時間格式化子類(如 SimpleDateFormat)允許進行格式化(也就是日期→文本)、解析(文本→日期)和標准化日期。
在創建 DateFormat 對象時不能使用 new 關鍵字,而應該使用 DateFormat 類中的靜態方法 getDateInstance(),示例代碼如下:
DateFormat df = DateFormat.getDatelnstance();
在創建了一個 DateFormat 對象后,可以調用該對象中的方法來對日期/時間進行格式化。DateFormat 類中常用方法如表 1 所示。
方法 | 描述 |
---|---|
String format(Date date) | 將 Date 格式化日期/時間字符串 |
Calendar getCalendar() | 獲取與此日期/時間格式相關聯的日歷 |
static DateFormat getDateInstance() | 獲取具有默認格式化風格和默認語言環境的日期格式 |
static DateFormat getDateInstance(int style) | 獲取具有指定格式化風格和默認語言環境的日期格式 |
static DateFormat getDateInstance(int style, Locale locale) |
獲取具有指定格式化風格和指定語言環境的日期格式 |
static DateFormat getDateTimeInstance() | 獲取具有默認格式化風格和默認語言環境的日期/時間 格式 |
static DateFormat getDateTimeInstance(int dateStyle,int timeStyle) |
獲取具有指定日期/時間格式化風格和默認語言環境的 日期/時間格式 |
static DateFormat getDateTimeInstance(int dateStyle,int timeStyle,Locale locale) |
獲取具有指定日期/時間格式化風格和指定語言環境的 日期/時間格式 |
static DateFormat getTimeInstance() | 獲取具有默認格式化風格和默認語言環境的時間格式 |
static DateFormat getTimeInstance(int style) | 獲取具有指定格式化風格和默認語言環境的時間格式 |
static DateFormat getTimeInstance(int style, Locale locale) |
獲取具有指定格式化風格和指定語言環境的時間格式 |
void setCalendar(Calendar newCalendar) | 為此格式設置日歷 |
Date parse(String source) | 將給定的字符串解析成日期/時間 |
格式化樣式主要通過 DateFormat 常量設置。將不同的常量傳入到表 1 所示的方法中,以控制結果的長度。DateFormat 類的常量如下。
- SHORT:完全為數字,如 12.5.10 或 5:30pm。
- MEDIUM:較長,如 May 10,2016。
- LONG:更長,如 May 12,2016 或 11:15:32am。
- FULL:是完全指定,如 Tuesday、May 10、2012 AD 或 11:l5:42am CST。
使用 DateFormat 類格式化曰期/時間的示例如下:
// 獲取不同格式化風格和中國環境的日期 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); // 獲取不同格式化風格和中國環境的時間 DateFormat df5 = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.CHINA); DateFormat df6 = DateFormat.getTimeInstance(DateFormat.FULL, Locale.CHINA); DateFormat df7 = DateFormat.getTimeInstance(DateFormat.MEDIUM, Locale.CHINA); DateFormat df8 = DateFormat.getTimeInstance(DateFormat.LONG, Locale.CHINA); // 將不同格式化風格的日期格式化為日期字符串 String date1 = df1.format(new Date()); String date2 = df2.format(new Date()); String date3 = df3.format(new Date()); String date4 = df4.format(new Date()); // 將不同格式化風格的時間格式化為時間字符串 String time1 = df5.format(new Date()); String time2 = df6.format(new Date()); String time3 = df7.format(new Date()); String time4 = df8.format(new Date()); // 輸出日期 System.out.println("SHORT:" + date1 + " " + time1); System.out.println("FULL:" + date2 + " " + time2); System.out.println("MEDIUM:" + date3 + " " + time3); System.out.println("LONG:" + date4 + " " + time4);
運行該段代碼,輸出的結果如下:
SHORT:18-10-15 上午9:30 FULL:2018年10月15日 星期一 上午09時30分43秒 CST MEDIUM:2018-10-15 9:30:43 LONG:2018年10月15日 上午09時30分43秒
該示例主要介紹了 DateFormat 類中方法與常量的結合使用,通過使用 DateFomat 類可以對日期進行不同風格的格式化。
SimpleDateFormat 類
如果使用 DateFormat 類格式化日期/時間並不能滿足要求,那么就需要使用 DateFormat 類的子類——SimpleDateFormat。
SimpleDateFormat 是一個以與語言環境有關的方式來格式化和解析日期的具體類,它允許進行格式化(日期→文本)、解析(文本→日期)和規范化。SimpleDateFormat 使得可以選擇任何用戶定義的日期/時間格式的模式。
SimpleDateFormat 類主要有如下 3 種構造方法。
- SimpleDateFormat():用默認的格式和默認的語言環境構造 SimpleDateFormat。
- SimpleDateFormat(String pattern):用指定的格式和默認的語言環境構造 SimpleDateF ormat。
- SimpleDateFormat(String pattern,Locale locale):用指定的格式和指定的語言環境構造 SimpleDateF ormat。
SimpleDateFormat 自定義格式中常用的字母及含義如表 2 所示。
字母 | 含義 | 示例 |
---|---|---|
y | 年份。一般用 yy 表示兩位年份,yyyy 表示 4 位年份 | 使用 yy 表示的年扮,如 11; 使用 yyyy 表示的年份,如 2011 |
M | 月份。一般用 MM 表示月份,如果使用 MMM,則會 根據語言環境顯示不同語言的月份 |
使用 MM 表示的月份,如 05; 使用 MMM 表示月份,在 Locale.CHINA 語言環境下,如“十月”;在 Locale.US 語言環境下,如 Oct |
d | 月份中的天數。一般用 dd 表示天數 | 使用 dd 表示的天數,如 10 |
D | 年份中的天數。表示當天是當年的第幾天, 用 D 表示 | 使用 D 表示的年份中的天數,如 295 |
E | 星期幾。用 E 表示,會根據語言環境的不同, 顯示不 同語言的星期幾 |
使用 E 表示星期幾,在 Locale.CHINA 語 言環境下,如“星期四”;在 Locale.US 語 言環境下,如 Thu |
H | 一天中的小時數(0~23)。一般用 HH 表示小時數 | 使用 HH 表示的小時數,如 18 |
h | 一天中的小時數(1~12)。一般使用 hh 表示小時數 | 使用 hh 表示的小時數,如 10 (注意 10 有 可能是 10 點,也可能是 22 點) |
m | 分鍾數。一般使用 mm 表示分鍾數 | 使用 mm 表示的分鍾數,如 29 |
s | 秒數。一般使用 ss 表示秒數 | 使用 ss 表示的秒數,如 38 |
S | 毫秒數。一般使用 SSS 表示毫秒數 | 使用 SSS 表示的毫秒數,如 156 |
例 1
編寫 Java 程序,使用 SimpleDateFormat 類格式化當前日期並打印,日期格式為“xxxx 年 xx 月 xx 日星期 xxx 點 xx 分 xx 秒”,具體的實現代碼如下:
import java.text.SimpleDateFormat; import java.util.Date; public class Test13 { public static void main(String[] args) { Date now = new Date(); // 創建一個Date對象,獲取當前時間 // 指定格式化格式 SimpleDateFormat f = new SimpleDateFormat("今天是 " + "yyyy 年 MM 月 dd 日 E HH 點 mm 分 ss 秒"); System.out.println(f.format(now)); // 將當前時間袼式化為指定的格式 } }
該程序的運行結果如下:
今天是 2018 年 10 月 15 日 星期一 09 點 26 分 23 秒