2013-12-23 2 views
3

Я читаю столбцы timestamp из базы данных в объект java.sql.Timestamp. Затем я хотел бы преобразовать значение метки времени в объект String, но сохранить точность микросекунды. Вызов метода toString() приближает меня, но, похоже, он потеряет конечные нули в микросекундах. Если временная метка заканчивается ненулевым числом, все в порядке.java.sql.Timestamp to String с точностью до микросекунды

Пример:

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() - метод временной метки.

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', чем код пользовательского добавления. –

Смежные вопросы