Java日期格式化(DateFormat類和SimpleDateFormat類)


格式化日期表示將日期/時間格式轉換為預先定義的日期/時間格式。例如將日期“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 所示。

表 1 DateFormat類的常用方法
方法 描述
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 所示。

表 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 秒

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM