我在列中有一个值,它的类型是时间戳。假设我有一个值2007-05-04 08:48:40.969774
现在,当尝试从数据库中获取值并将这个时间戳值返回给函数时,我应该使用什么SimpleDateFormatter模式,以便返回秒旁边的分数部分。
我使用了yyyy:mm:ss,但它只返回到秒,忽略了秒旁边的分数(.969774)。我需要帮助,在返回这个分数部分,与6位精度。
发布于 2012-04-09 13:24:41
格式化java.util.Date
(或java.sql.Timestamp
)的默认方法只有毫秒精度。您可以使用yyyy-MM-dd hh:mm:ss.SSS
获得毫秒精度。
一个java.sql.Timestamp
实际上具有纳秒精度(假设数据库服务器和驱动程序实际上支持它)。在Java8中格式化它的最简单方法是将时间戳转换为java.time.LocalDateTime
(使用Timestamp.toLocalDateTime()
),并在java.time.format.DateTimeFormatter
中使用支持纳秒的java.time
格式设置选项。
如果您使用Java 7或更早版本,它将需要一些额外的努力,因为通常的日期格式化程序不支持它。例如,您可以使用模式yyyy-MM-dd hh:mm:ss
的日期格式化程序(只格式化到秒),并自己追加Timestamp.getNanos()
的子秒(带有适当的零填充)。
发布于 2012-04-09 14:04:52
你必须有办法获得一个微秒的时间戳。我结合使用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);
}
发布于 2015-04-12 21:19:32
在Java8及更高版本中,java.time包支持解析和操作日期/时间以达到纳秒精度。这意味着每秒的分数可以达到9位数。
https://stackoverflow.com/questions/10073813
复制相似问题