2017-07-09 71 views
-1

基本上我試圖將字符串數據轉換爲Timestamp格式。當我將數據轉換爲時間戳格式時,SimpleDateFormat添加了三分鐘。 由於毫秒數據等於3分鐘,但我想保留時間戳值的毫秒數據。如何在java上保存milisecond數據simpledateFormat

代碼:

public Double TimestampTest(String Timestamp){ 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 
    Date parsedDate = null; 
    try { 
     parsedDate = dateFormat.parse(Timestamp); 
    } catch (ParseException e1) { 
     e1.printStackTrace(); 
    } 
    Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime()); 
... 
} 

Timestamp值

2002-04-17 23:45:58.983 

對於測試用例

System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").parse("2015-04-22T19:54:11.219983Z")); 
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS'Z'").parse("2015-04-22 19:54:11.219983Z")); 

結果是相同的爲兩者

Wed Apr 22 19:57:50 EEST 2015 

Wed Apr 22 19:57:50 EEST 2015 

因爲

219 983 milliseconds = 3.66638333 minutes 

總之我想保留MS數據。是有沒有辦法做到這一點?

+0

'SimpleDateFormat'具有毫秒精度 - 小數點後3位數。如果有3個以上,你會得到奇怪的結果:https://stackoverflow.com/q/36055717/7605325 - https://stackoverflow.com/q/44979279/7605325 –

+1

[SimpleDateFormat可能重複的毫秒數不能超過4數字](https://stackoverflow.com/questions/36055717/simpledateformat-cannot-parse-milliseconds-with-more-than-4-digits) –

回答

2

如果我明白,你的字符串末尾有什麼是微秒,而不是毫秒。舊的,過時的Date和SimpleDateFormat類不支持微秒。但是您可以使用新的java.time類:

System.out.println(ZonedDateTime.parse("2015-04-22T19:54:11.219983Z", 
             DateTimeFormatter.ofPattern(("yyyy-MM-dd'T'HH:mm:ss.SSSSSSVV")))); 
+1

我相信,在這種情況下,你可以使用'parse'沒有格式化程序 - 雖然我不在電腦前測試 –

+0

@Hugo是正確的。如果你有6位小數的要求,你需要一個格式化程序,但對於大多數用途來說,顯式格式化程序只是混淆了代碼。 'ZonedDateTime.parse(「2015-04-22T19:54:11.219983Z」)'工作。否則答案是非常好的。 –