簡體   English   中英

Java中人類可讀和可解析的日期格式

[英]Human readable and parsable date format in Java

我想將Date對象保存為可讀字符串(例如22/10/2009 21:13:14),該字符串也可以解析為Date對象。

我嘗試了很多東西,我能找到的最好的東西是使用DateFormater進行解析和格式化,但它有一個挫折。 格式化日期時,您將丟失秒信息。 我試圖找到是否有一個選項來格式化它並顯示秒數(更好的是毫秒級別,因為那是Date對象允許的分辨率)但是我做得很短。

有任何想法嗎?

看看java.text.SimpleDateFormat

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

使用ISO 8601格式。

  • 它是靈活的,如果有的話,它包括秒和秒的一小部分,但如果它們是0,你也可以將它們排除在外。
  • 它是標准的,因此越來越多的工具格式化並解析它。 非常適合存儲或數據交換的序列化。
  • 它就像2009-10-22T21:13:14 ,我應該說這是非常人性化的(盡管中間的T表示時間的開始部分可能在最初時感覺不尋常)。
  • 正如邁克拉在另一個答案中所要求的那樣,字符串排序正確,只要年份在1000到9999之間的四位數范圍內。
  • 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM