How to print time up to 6 digits of precision for seconds value
date, design-patterns, java, timestamp
Solution
The default ways of formatting a `java.util.Date` (or `java.sql.Timestamp`) has only millisecond precision. You can use `yyyy-MM-dd hh:mm:ss.SSS` to get that millisecond precision.
A `java.sql.Timestamp` actually does have (up to) nanosecond precision (assuming the database server and the driver actually support it). The easiest way to format it in Java 8 is to convert the timestamp to a `java.time.LocalDateTime` (using `Timestamp.toLocalDateTime()`) and use the `java.time` formatting options in `java.time.format.DateTimeFormatter` which support up to nanoseconds.
If you use Java 7 or earlier it will take some extra effort, as the normal date formatters don't support it. For example you could use a dateformatter with pattern `yyyy-MM-dd hh:mm:ss` (to only format up to seconds) and append the sub-second nano seconds (with appropriate zero-padding) of `Timestamp.getNanos()` yourself.
Problem
I have a value in column which is of type timestamp. Lets say I have a value 2007-05-04 08:48:40.969774 Now, when trying to fetch the value from the database and return this timestamp value to a function, what SimpleDateFormatter pattern should I use so that the fraction part beside the seconds also gets returned. I have used yyyy-MM-dd hh:mm:ss, but that only returns till the seconds and ignores the fraction present beside the seconds(.969774). I need help in returning this fraction part also, with a 6-digits precision.