如何为秒值打印最多6位精度的时间

Sur*_*dra 12 java timestamp design-patterns date

我在列中的值是timestamp类型.让我说我有一个价值2007-05-04 08:48:40.969774

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

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

Mar*_*eel 6

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

一个java.sql.Timestamp实际上确实有(最多)纳秒的精度(假设数据库服务器和司机居然支持它).在Java 8中格式化它的最简单方法是将时间戳转换为java.time.LocalDateTime(使用Timestamp.toLocalDateTime())并使用支持最多纳秒的java.time格式化选项java.time.format.DateTimeFormatter.

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


Pet*_*rey 5

您必须有一种获取微秒级时间戳的方法。我将System.currentTimeMillis()与System.nanoTime()结合使用。然后,您需要一种显示它的方法。您可以将其除以1000并正常显示毫秒,然后显示时间的后3位。即有一个像

long timeUS = System.currentTimeMillis() * 1000 + micros;
Run Code Online (Sandbox Code Playgroud)

这是一个更详细的例子

HiresTimer.javaHiresTimerTest.java

测试打印

2012/04/09T14:22:13.656008
2012/04/09T14:22:13.656840
2012/04/09T14:22:13.656958
2012/04/09T14:22:13.657066
 ....
2012/04/09T14:22:13.665249
2012/04/09T14:22:13.665392
2012/04/09T14:22:13.665473
2012/04/09T14:22:13.665581
Run Code Online (Sandbox Code Playgroud)

编辑:相关的代码是

private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy/MM/dd'T'HH:mm:ss.SSS");
private static final DecimalFormat DF = new DecimalFormat("000");

public static String toString(long timeUS) {
    return SDF.format(timeUS / 1000) + DF.format(timeUS % 1000);
}
Run Code Online (Sandbox Code Playgroud)

  • System.nanoTime()不返回与绝对时间有任何关联的值。它仅用于测量两次调用System.nanoTime()之间的经过时间。http://stackoverflow.com/q/1712205/260633 (7认同)