如何为秒值打印高达 6 位精度的时间

2022-01-13 00:00:00 timestamp date design-patterns java

我在列中有一个时间戳类型的值.假设我有一个值 2007-05-04 08:48:40.969774

I have a value in column which is of type timestamp. Lets say I have a value 2007-05-04 08:48:40.969774

现在,当尝试从数据库中获取值并将此时间戳值返回给函数时,我应该使用什么 SimpleDateFormatter 模式,以便也返回秒旁边的小数部分.

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.

我使用了 yyyy-MM-dd hh:mm:ss,但它只返回到秒数,并忽略秒数旁边的分数 (.969774).我还需要帮助以 6 位精度返回这个小数部分.

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.

推荐答案

java.util.Date(或java.sql.Timestamp)的默认格式化方式只有毫秒精度.您可以使用 yyyy-MM-dd hh:mm:ss.SSS 来获得毫秒精度.

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.

java.sql.Timestamp 实际上确实具有(高达)纳秒精度(假设数据库服务器和驱动程序实际上支持它).在 Java 8 中格式化它的最简单方法是将时间戳转换为 java.time.LocalDateTime(使用 Timestamp.toLocalDateTime())并使用 javajava.time.format.DateTimeFormatter 中的 .time 格式选项,最多支持纳秒.

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.

如果您使用 Java 7 或更早版本,则需要付出一些额外的努力,因为普通的日期格式化程序不支持它.例如,您可以使用带有模式 yyyy-MM-dd hh:mm:ss 的日期格式化程序(仅格式化为秒)并附加亚秒纳秒(带有适当的零填充)Timestamp.getNanos() 你自己.

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.

相关文章