java.util.Date格式SSSSSS:如果不是微秒,最后3位数字是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (206)

在我的Windows(8)工作站和AIX上测试了这些代码:

    public static void main(String[] args) {
        System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS").format(new Date()));
        System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS").format(new Date()));
    }

并得到了类似于此的结果:

2013-10-07 12:53:26.000905
2013-10-07 12:53:26.000906

有人能解释我什么是最后的数字,如果不是微秒?

注意:我使用DB2数据库进行交互,其中使用定时列将按时间排序的数据存储为TIMESTAMP,其中数字在秒后即6微秒(即IMO)。但所有这些“时间戳”都是通过请求以下查询创建的:

SELECT current timestamp as currenttimestamp FROM Table ( values (1)) temp

我想知道,鉴于上述结果,我不能仅仅在我的代码中使用new Date()而不是current timestamp从数据库中选择。

PS:我搜索但没有找到相关的(回答)问题,例如: java中的当前时间(以微秒为单位) 或 以小时,分钟,秒,毫秒,微秒

提问于
用户回答回答于

SimpleDateFormat文档

Letter     Date or Time Component     Presentation     Examples  
S          Millisecond                Number           978 

所以它是毫秒,或1/1000秒。你只需要用6位数字格式化,所以你需要添加3个额外的前导零...

你可以这样检查它:

    Date d =new Date();
    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").format(d));
    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SS").format(d));
    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(d));
    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSS").format(d));
    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSS").format(d));
    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS").format(d));

输出:

2013-10-07 12:13:27.132
2013-10-07 12:13:27.132
2013-10-07 12:13:27.132
2013-10-07 12:13:27.0132
2013-10-07 12:13:27.00132
2013-10-07 12:13:27.000132
用户回答回答于

我用另一个技巧来格式化日期以6位精度(微秒):

System.out.println(
    new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.").format(microseconds/1000)
    +String.format("%06d", microseconds%1000000));

这种技术可以进一步扩展到纳秒级或更高。

扫码关注云+社区