53

刚刚在我的 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 中的当前时间(以微秒为单位)使用小时、分钟、秒、毫秒、微秒获取时间

4

5 回答 5

113

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

Ideone小提琴

于 2013-10-07T11:09:04.497 回答
14
于 2018-02-02T00:31:09.170 回答
3

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

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

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

于 2014-06-27T13:47:04.487 回答
0

如果要在文本表示中获得小数秒,请使用 java.sql.Timestamp.toString。时间戳与 DB 和 Java Date 之间的区别在于 DB 精度为纳秒,而 Java Date 精度为毫秒。

于 2013-10-07T11:19:38.340 回答
-4

SSSSSS 是微秒。假设时间是 10:30:22 (Seconds 22) 而 10:30:22.1 是 22 seconds 和 1/10 of a second 。扩展相同的逻辑,10:32.22.000132 将是 22 秒和 132/1,000,000 秒,也就是微秒。

于 2018-02-01T17:26:42.790 回答