gpt4 book ai didi

datetime - 哪种 java.time 类型最适合审计信息?

转载 作者:行者123 更新时间:2023-12-01 02:04:09 25 4
gpt4 key购买 nike

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

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

什么类型最适合?

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

    我会去即时。如果您对时间戳(线程安全、不变性)进行任何进一步处理,则新的 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 秒
  • 本地日期时间:1.856 秒
  • 时间戳:0.173 秒

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

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

    If you live in Germany and create a LocalDateTime instance and someone else lives in USA and creates another instance at the very same moment (provided the clocks are properly set) - the value of those objects would actually be different. This does not apply to Instant, which is calculated independently from time zone.



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

    关于datetime - 哪种 java.time 类型最适合审计信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33914987/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com