前面介紹瞭如何經過Date工具獲取各個時間數值,可是用戶更喜歡形如「2018-11-24 23:04:18」這種結構清晰、簡潔明瞭的字符串,而非囉裏八唆依次彙報每一個時間單位及其數值的描述。既然日期時間存在約定俗成的習慣表達,那就有勞程序員手工把日期時間轉換成字符串唄,因而利用String類型的format方法,可將各個時間單位按照規定格式拼接成符合要求的字符串。下面是經過String.format方法轉換日期時間的代碼例子:html
Date date = new Date(); // 手工拼接指定格式的日期時間字符串 String dateTimeDesc = String.format("%d-%d-%d %d:%d:%d", date.getYear()+1900, date.getMonth()+1, date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()); System.out.println("dateTimeDesc="+dateTimeDesc);
運行上面的格式化代碼,獲得的日誌結果以下所示:java
dateTimeDesc=2018-11-25 11:18:53
雖然利用String.format方法可以獲得大衆熟知的日期時間串,但是這個辦法實在太拖沓冗長了,一個簡簡單單的功能卻寫了好幾行代碼。爲此Java又提供了專門的日期格式化工具SimpleDateFormat,首先爲該工具建立一個指定格式的格式化實例,而後調用它的format方法,便可將某個日期實例轉換爲規定格式的字符串。按照以上步驟編寫的格式化代碼例子以下:程序員
// 獲取當前的日期時間字符串 public static String getNowDateTime() { // 建立一個日期格式化的工具 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 將當前日期時間按照指定格式輸出格式化後的日期時間字符串 return sdf.format(new Date()); }
注意到上述代碼的日期時間格式存在大小寫字母揉合的狀況,爲避免混淆,有必要對這些格式字符串進行取值說明,詳述以下:
小寫的yyyy:表示四位年份數字,如194九、2017等等。
大寫的MM:表示兩位月份數字,如01表示一月份,12表示12月份。
小寫的dd:表示兩位日期數字,如08表示當月八號,26表示當月二十六號。
大寫的HH:表示24小時制的兩位小時數字,如19表示晚上七點。
小寫的hh:表示12小時制的兩位小時數字,如06可同時表示早上六點與傍晚六點;由於12小時制的表達會引起歧義,因此實際開發中不多這麼使用。
小寫的mm:表示兩位分鐘數字,如30表示某個點鐘的三十分。
小寫的ss:表示兩位秒鐘數字。
大寫的SSS:表示三位毫秒數字。
其他的橫線「-」、空格「 」、冒號「:」、點號「.」等字符,僅僅是鏈接符號,方便觀看各類單位的時間數字而已;對於中文世界來講,也可採用形如「yyyy年MM月dd日HH時mm分ss秒」的格式標記。
如今有了日期格式化工具SimpleDateFormat,以及每一個時間單位的標記字符,想要輸出特定格式的日期時間串就易如反掌了。譬如只需單獨的日期串,無需後面的時間串,則可指定格式化標記爲「yyyy-MM-dd」,相應的日期格式化代碼以下所示:工具
// 獲取當前的日期字符串 public static String getNowDate() { // 建立一個日期格式化的工具 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 將當前日期按照指定格式輸出格式化後的日期字符串 return sdf.format(new Date()); }
又如僅需單獨的時間串,無需前面的日期串,則可指定格式化標記爲「HH:mm:ss」,相應的時間格式化代碼以下所示:日誌
// 獲取當前的時間字符串 public static String getNowTime() { // 建立一個日期格式化的工具 SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); // 將當前時間按照指定格式輸出格式化後的時間字符串 return sdf.format(new Date()); }
以上的時間格式化只精確到秒,若需精確到毫秒,則可在原來的時間標記末尾添加「.SSS」,表示輸出的時間串須要補充三位毫秒數字,此時的時間格式化代碼以下所示:orm
// 獲取當前的時間字符串(精確到毫秒) public static String getNowTimeDetail() { // 建立一個日期格式化的工具 SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS"); // 將當前時間按照指定格式輸出格式化後的時間字符串(精確到毫秒) return sdf.format(new Date()); }
有時候考慮到代碼內部的方便處理,要求日期時間串爲不帶任何標點的純數字串,那麼可採起形如「yyyyMMddHHmmss」的日期時間標記,因而將格式化代碼改寫成下面這樣:htm
// 獲取當前的日期時間字符串(純數字,不包含其它標點符號) public static String getSimpleDateTime() { // 建立一個日期格式化的工具 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); // 將當前日期時間按照指定格式輸出格式化後的日期時間字符串 return sdf.format(new Date()); }
SimpleDateFormat的做用並不限於將日期類型轉換爲字符串類型,它還支持將字符串轉換爲日期類型,這時用到的即是parse方法。具體的轉換步驟依舊分紅兩步,第一步先建立一個指定標記的格式化實例,第二步調用該實例的parset方法,便可將某個對應格式的字符串轉換爲日期實例。如下代碼演示瞭如何把字符串轉換爲日期類型的過程:blog
String str = "2018-11-25 11:18:53"; // 建立一個日期格式化的工具 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 從字符串中按照指定格式解析日期時間信息 Date dateFromStr = sdf.parse(str);
更多Java技術文章參見《Java開發筆記(序)章節目錄》開發