[英]Human readable and parsable date format in Java
我想將Date對象保存為可讀字符串(例如22/10/2009 21:13:14),該字符串也可以解析為Date對象。
我嘗試了很多東西,我能找到的最好的東西是使用DateFormater進行解析和格式化,但它有一個挫折。 格式化日期時,您將丟失秒信息。 我試圖找到是否有一個選項來格式化它並顯示秒數(更好的是毫秒級別,因為那是Date對象允許的分辨率)但是我做得很短。
有任何想法嗎?
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss.SSS");
Date dt = new Date();
String S = sdf.format(dt); // formats to 09/23/2009 13:53:28.238
Date dt2 = sdf.parse(S); // parses back
SimpleDateFormat
可以基於包含秒和偶數毫秒的非常簡單的模式系統來格式化和解析日期。
其他答案都很好。
但是當做這種事情時, 請選擇一種格式,當編碼為字符串時可以正確排序 ....“yyyy / MM / dd HH:mm:ss”很好。 當軟件工程師選擇一種不以明顯,方便的方式排序的日期格式時,它總是令我驚訝。
你將在未來的某個遙遠的地方拯救你的同事們很多痛苦 - 把它想象成好的業力:-)
有點偏離主題,但我總覺得有必要提醒人們DateFormat和SimpleDateFormat不是線程安全的! Sun文檔清楚地說明了這一點,但是我一直在野外找到代碼,人們在靜態中使用SimpleDateFormat ...
使用ISO 8601格式。
2009-10-22T21:13:14
,我應該說這是非常人性化的(盡管中間的T
表示時間的開始部分可能在最初時感覺不尋常)。 java.time
的類,現代Java日期和時間API,以及Joda Time的類都將ISO 8601解析為默認值,即沒有任何顯式格式化程序,並從其toString
方法生成相同的格式。 使用java.time
適度演示:
LocalDateTime dateTime = LocalDateTime.of(2009, 10, 22, 21, 13, 14);
String readableString = dateTime.toString();
System.out.println(readableString);
LocalDateTime parsedBack = LocalDateTime.parse(readableString);
System.out.println(parsedBack);
這打印兩條相同的行:
2009-10-22T21:13:14
2009-10-22T21:13:14
后一個System.out.println()
調用再次隱式調用toString()
,所以這不應該讓人感到驚訝。
如果你想做一點點簡單,並且免於制作你自己的大多數其他Answers所涉及的DateFormat,你可以利用java.time.Instant中的默認格式:
(new Date()).toInstant.toString();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.