如何打印时间高达6位精度的秒值
我在列中有一个时间戳类型的值。假设我有一个值 2007-05-04 08:48:40.969774
现在,当尝试从数据库获取值并将此时间戳值返回给函数时,我应该使用什么 SimpleDateFormatter 模式,以便秒旁边的分数部分也返回。
我用过yyyy-MM-dd hh:mm:ss,但这只返回到秒,并忽略秒(.969774)旁边存在的分数。我也需要帮助以6位精度返回此分数部分。
我在列中有一个时间戳类型的值。假设我有一个值 2007-05-04 08:48:40.969774
现在,当尝试从数据库获取值并将此时间戳值返回给函数时,我应该使用什么 SimpleDateFormatter 模式,以便秒旁边的分数部分也返回。
我用过yyyy-MM-dd hh:mm:ss,但这只返回到秒,并忽略秒(.969774)旁边存在的分数。我也需要帮助以6位精度返回此分数部分。
格式化(或 )的默认方法只有毫秒级精度。您可以使用 来获得该毫秒级精度。java.util.Date
java.sql.Timestamp
yyyy-MM-dd hh:mm:ss.SSS
实际上具有(最多)纳秒精度(假设数据库服务器和驱动程序实际支持它)。在Java 8中格式化它的最简单方法是将时间戳转换为(使用),并使用支持纳秒的格式设置选项。java.sql.Timestamp
java.time.LocalDateTime
Timestamp.toLocalDateTime()
java.time
java.time.format.DateTimeFormatter
如果您使用Java 7或更早版本,则需要一些额外的努力,因为正常的日期格式化程序不支持它。例如,您可以使用带有模式的日期格式化程序(最多只能格式化几秒钟),并附加自己的亚秒纳秒(具有适当的零填充)。yyyy-MM-dd hh:mm:ss
Timestamp.getNanos()
您必须有一种方法可以获得微秒时间戳。我将 System.currentTimeMillis() 与 System.nanoTime() 结合使用。然后,您需要一种方法来显示它。您可以将其除以 1000 并正常显示毫秒,然后显示时间的最后 3 位数字。即有一个像这样的时间
long timeUS = System.currentTimeMillis() * 1000 + micros;
这是一个更详细的示例
HiresTimer.java和HiresTimerTest.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
编辑:相关代码是
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);
}