2016-04-26 236 views
0

這是我在Java 1.6的代碼(問題被標記爲重複的,但建議的解決方案是指Java的1.8)時間戳轉換問題

public static void main(String[] args){ 
    try{ 
     String dateTimeString = "2015-08-10-14.20.40.679279"; 
     DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSSSSS"); 
     java.util.Date formattedDate = dateFormat.parse(dateTimeString); 
     Timestamp formattedTime = new Timestamp(formattedDate.getTime()); 
     System.out.println(formattedTime); 
    } catch (Throwable t){ 
     t.printStackTrace(); 
    } 
} 

所得對象是:2015-08-10 14:31:59.279,這麼清楚什麼是錯的,而解析分鐘,秒和毫秒,我只是不知道究竟是什麼。
謝謝!

+1

什麼是'679279'? millis(看起來不正確)?秒的幾分之一(即微秒,在這種情況下,由於日期API僅支持毫秒,您需要刪除最後3位數)? – assylias

+0

提到的Java 8(java.time)功能的大部分被移植到[ThreeTen-Backport](http://www.threeten.org/threetenbp/)項目中的Java 6和7。在這裏使用的麻煩的遺留類的巨大改進。而java.time類使用納秒級分辨率(9位小數),因此它可以適應您的微秒級數據(6位小數位),而且不會丟失數據,也沒有麻煩。 –

回答

2

沒有類似SSSSSS的東西。 檢查Simple Date Format manual

+0

是的,它說「millis」,所以你認爲如果我把SSS它可以與6位數的輸入正常工作? – urir

+0

不,它不會。截斷最後3位數字。 – mariusz2108

+0

謝謝,我想我沒有選擇,只能鬆散這個數據 – urir

1

你要退學的最後3毫秒:

Date d = (new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSS", Locale.US)).parse("2015-08-10-14.20.40.679279"); 
     System.out.println(new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.S").format(d)); 
     System.out.println(new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SS").format(d)); 
     System.out.println(new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSS").format(d)); 

     Date dd = (new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSS", Locale.US)).parse("2015-08-10-14.20.40.679"); 
     System.out.println(new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.S").format(dd)); 
     System.out.println(new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SS").format(dd)); 
     System.out.println(new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSS").format(dd)); 

得到正確的格式:

2015-08-10-14.31.59.279 
2015-08-10-14.31.59.279 
2015-08-10-14.31.59.279 
2015-08-10-14.20.40.679 
2015-08-10-14.20.40.679 
2015-08-10-14.20.40.679 

檢查出來這個playground

+0

謝謝,看起來不錯 – urir