我想將Date對象保存爲可解析爲Date對象的可讀字符串(例如22/10/2009 21:13:14)。Java中的人類可讀和可分析日期格式
我已經嘗試了很多事情,我能找到的最好的方法是使用DateFormater進行解析和格式化,但它有一個挫折。格式化日期時,會丟失秒信息。我試圖找出是否有格式化它並顯示秒數的選項(甚至更好的是毫秒級別,因爲這是Date對象允許你擁有的分辨率),但是我沒有做到。
任何想法?
我想將Date對象保存爲可解析爲Date對象的可讀字符串(例如22/10/2009 21:13:14)。Java中的人類可讀和可分析日期格式
我已經嘗試了很多事情,我能找到的最好的方法是使用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
可以格式化和分析基於一個非常簡單的模式系統,該系統包括第二代甚至毫秒的日期。
@Unihedron更新了鏈接。審稿人請注意,這不是一個鏈接唯一的答案 - 答案仍然沒有鏈接意義,鏈接本身是官方文檔。 – 2014-09-13 05:54:16
有點偏離主題,但我總是覺得有必要提醒人們,DateFormat和SimpleDateFormat不是線程安全的! Sun的文檔清楚地說明了這一點,但我一直在野外尋找代碼,人們將SimpleDateFormat固定在一個靜態...
這就是爲什麼大家應該使用喬達時間,而不是自己節省頭痛:) – Nick 2009-09-24 09:21:56
我完全同意。另一方面,我希望Sun能夠修復這些課程,所以如果沒有其他任何內容,我不必再通過另一個「併發經驗教訓」 - 與人們一起警告我們。 (哦,諷刺的是,我只是在StackOverflow上完成了同樣的事情:-)) – 2009-09-24 11:39:17
其他答案都很好。
但在做的事情這種時候請挑選各種適當作爲字符串......「YYYY/MM/DD HH:MM:SS」時,編碼格式是好的。當軟件工程師選擇不明顯,便捷的日期格式時,它總是令我震驚。
你會在將來某個遙遠的點保存你的同胞開發商很多痛苦的 - 認爲它是好人緣:-)
「yyyy/dd/MM」排序不正確。考慮將2015/21/10,2015/20/11和2015/22/11作爲字符串分類到2015/20/11,2015/21/10和2015/22/11。 – 2015-12-10 15:33:07
對不起,我的意思是yyyy/MM/dd。固定。 – mikera 2015-12-11 02:12:14
使用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()
一次,所以這不應該感到驚訝。
如果你想要做的更簡單一點,並作出自己的日期格式,大多數其他的答案涉及倖免,你可以在java.time.Instant利用默認的格式:
(new Date()).toInstant.toString();
當這個答案寫於2009年,SimpleDateFormat是我們爲此目的而設計的。它已被證明是麻煩的,幸運的是在2014年被'java.time',現代Java日期和時間API以及'DateTimeFormatter'類所取代。我建議你不要再使用'SimpleDateFormat'。 – 2018-01-18 17:46:30