2013-12-23 222 views
3

我正在讀取數據庫中的時間戳列到java.sql.Timestamp對象中。然後我想將時間戳的值轉換爲一個String對象,但保持微秒的精度。調用toString()方法讓我接近,但它似乎在微秒內丟失尾隨零。如果時間戳結束於非零數字,則一切正常。java.sql.Timestamp以微秒級精度字符串

樣品:

SimpleDateFormat outDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS"); 
String s = "2005-02-25 11:50:11.579410"; 
java.sql.Timestamp ts = java.sql.Timestamp.valueOf(s); 
String out = ts.toString(); // This returns 2005-02-25 11:50:11.57941 
out = outDateFormat.format(ts); // This returns 2005-02-25 11:50:11.000579 

我真的希望打印2005-02-25 11:50:11.579410。

+0

'S'是毫秒而不是微秒... –

+0

同意。我只是爲了展示它的行爲如何而插入示例。 – Mensur

+0

爲什麼你需要微秒精度? – ashes999

回答

4

您可以使用getNanos() - Timestamp的方法。

SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss."); 
String s = "2005-02-25 11:50:11.579410"; 
java.sql.Timestamp ts = java.sql.Timestamp.valueOf(s); 
int microFraction = ts.getNanos()/1000; 

StringBuilder sb = new StringBuilder(fmt.format(ts)); 
String tail = String.valueOf(microFraction); 
for (int i = 0; i < 6 - tail.length(); i++) { 
    sb.append('0'); 
} 
sb.append(tail); 
System.out.println(sb.toString()); 
+0

這將符合我的需求。謝謝! – Mensur

+1

可能更適合使用'String.format'或者更好的'MessageFormat'而不是自定義的附加代碼。 –