【问题标题】:How to convert the MongoDB object id to a Java Date or Instant using Java如何使用 Java 将 MongoDB 对象 ID 转换为 Java Date 或 Instant
【发布时间】:2018-08-29 17:22:55
【问题描述】:

MongoDB ObjectID 包含其创建时间的嵌入式时间戳。如何在不使用驱动程序库类的情况下使用纯 Java 提取此时间戳?

MongoDB 创建的对象 ID 通常如下所示:

5b86bd41840a1be5a55c7022
598af6efe4b09fc2332cf16a
598ad932e4b0f0f169b42d5f

提取目标可以是longjava.util.Datejava.time.Instant

【问题讨论】:

    标签: java mongodb


    【解决方案1】:

    基于page,您可以使用这些静态方法将 MongoDB ObjectID 转换为时间戳、java.util.Datejava.time.Instant 对象:

    public static Instant convertToInstantFrom(String objectId) {
        return convertToDateFrom(objectId).toInstant();
    }
    
    public static Date convertToDateFrom(String objectId) {
        return new Date(convertToTimestampFrom(objectId));
    }
    
    public static long convertToTimestampFrom(String objectId) {
        return Long.parseLong(objectId.substring(0, 8), 16) * 1000;
    }
    

    如果运行以下代码sn -p:

    public static void main(String[] args) throws ParseException {
        Stream.of("5b86bd41840a1be5a55c7022", "598af6efe4b09fc2332cf16a", "598ad932e4b0f0f169b42d5f")
                .map(SimpleTests::convertToInstantFrom).forEach(System.out::println);
    }
    

    你会在控制台看到这个结果:

    2018-08-29T15:35:29Z
    2017-08-09T11:50:07Z
    2017-08-09T09:43:14Z
    

    【讨论】:

    • Thansk gil,它是一个很好的解决方案,你可以建议我们说我们做 instant.atOffset(ZoneOffset.UTC);之后说我们得到像 2021-07-15T05:27:00Z 这样的即时值,它将减少到 2021-07-15T05:27Z,最后一个零被删除。有什么办法,我们可以保持零,我们想要 OffsetDateTime。谢谢
    猜你喜欢
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 2011-11-21
    • 2016-11-26
    • 1970-01-01
    • 2023-03-22
    • 2015-05-23
    相关资源
    最近更新 更多