1. 程式人生 > >Java開發筆記(四十)日期與字串的互相轉換

Java開發筆記(四十)日期與字串的互相轉換

前面介紹瞭如何通過Date工具獲取各個時間數值,但是使用者更喜歡形如“2018-11-24 23:04:18”這種結構清晰、簡潔明瞭的字串,而非囉裡八唆依次彙報每個時間單位及其數值的描述。既然日期時間存在約定俗成的習慣表達,那就有勞程式設計師手工把日期時間轉換成字串唄,於是利用String型別的format方法,可將各個時間單位按照規定格式拼接成符合要求的字串。下面是通過String.format方法轉換日期時間的程式碼例子:

		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);

 

執行上面的格式化程式碼,得到的日誌結果如下所示:

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:表示四位年份數字,如1949、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”,表示輸出的時間串需要補充三位毫秒數字,此時的時間格式化程式碼如下所示:

	// 獲取當前的時間字串(精確到毫秒)
	public static String getNowTimeDetail() {
		// 建立一個日期格式化的工具
		SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS");
		// 將當前時間按照指定格式輸出格式化後的時間字串(精確到毫秒)
		return sdf.format(new Date());
	}

 

有時候考慮到程式碼內部的方便處理,要求日期時間串為不帶任何標點的純數字串,那麼可採取形如“yyyyMMddHHmmss”的日期時間標記,於是將格式化程式碼改寫成下面這樣:

	// 獲取當前的日期時間字串(純數字,不包含其它標點符號)
	public static String getSimpleDateTime() {
		// 建立一個日期格式化的工具
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
		// 將當前日期時間按照指定格式輸出格式化後的日期時間字串
		return sdf.format(new Date());
	}

 

SimpleDateFormat的作用並不限於將日期型別轉換為字串型別,它還支援將字串轉換為日期型別,這時用到的便是parse方法。具體的轉換步驟依舊分成兩步,第一步先建立一個指定標記的格式化例項,第二步呼叫該例項的parset方法,即可將某個對應格式的字串轉換為日期例項。以下程式碼演示瞭如何把字串轉換為日期型別的過程:

		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開發筆記(序)章節目錄