【问题标题】:Which java.time type best fits for auditing information?哪种 java.time 类型最适合审计信息?
【发布时间】:2016-02-28 03:40:42
【问题描述】:

在我们的新(基于 Java 8)应用程序中,我们希望存储审计信息,例如 lastModifiedAtcreatedAt

目前这些属性有一个java.sql.Timestamp 类型,代表一个时刻(UTC)。新应用程序不再使用 SQL 数据库,我们希望使用新的 java.time API。

哪种类型最适合?

  • Instant。阅读 JavaDoc,它适用于这些用例:“此类模拟时间线上的单个瞬时点。这可能用于记录应用程序中的事件时间戳。”
  • LocalDateTime 因为这是根据 Oracle Technology Network article, Java SE 8 Date and Time 映射到 java.sql.Timestamp
  • 请保留java.sql.Timestamp。因为新的java.time 类型在这个用例中有什么优势? java.sql.Timestamp 效率更高(创建的对象更少)。

【问题讨论】:

    标签: datetime time timestamp java-8


    【解决方案1】:

    我会选择 Instant。如果您对时间戳进行任何进一步处理(线程安全、不变性),则新的 java.time api 使用起来会更好。

    java.sql.Timestamp 只是 java.util.Date 的包装器,带有额外的纳秒信息,因此它也继承了 java.util.Date 的所有缺点。速度方面,我刚刚对这三种类型做了一个小测试:

    public void test() {
        Instant ref = Instant.now();
        Instant inst = null;
        for (int i = 0; i < 10000000; i++) {
            inst = Instant.now();
        }
        System.out.println(Duration.between(ref, Instant.now()));
        ref = Instant.now();
        LocalDateTime ldt = null;
        for (int i = 0; i < 10000000; i++) {
            ldt = LocalDateTime.now();
        }
        System.out.println(Duration.between(ref, Instant.now()));
        ref = Instant.now();
        Timestamp ts = null;
        for (int i = 0; i < 10000000; i++) {
            ts = new Timestamp((new Date()).getTime());
        }
        System.out.println(Duration.between(ref, Instant.now()));
    }
    

    在我的机器上结果是:

    • 瞬间:0.188 秒
    • Lo​​calDateTime:1.856 秒
    • 时间戳:0.173 秒

    因此,与 LocalDateTime 相比,Instant 的实例化速度更快。使用哪种类型可能还取决于您要存储数据的位置和方式。

    编辑 使用 LocalDateTime 还有一个问题:

    如果您居住在德国并创建一个 LocalDateTime 实例和某人 else 住在美国并在同一时刻创建另一个实例 (如果时钟设置正确) - 这些对象的值 实际上会有所不同。这不适用于 Instant,即 独立于时区计算。

    引自here。更改为夏令时时可能会出现同样的问题。

    【讨论】:

      猜你喜欢
      • 2011-02-27
      • 2011-03-10
      • 2016-01-06
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      • 2016-11-19
      • 2019-07-11
      • 1970-01-01
      相关资源
      最近更新 更多