如何在Java中将Bson时间戳从Mongo变更流转换为UTC日期格式?

问题描述 投票:0回答:2

例如: clusterTime = TimeStamp{value= 6948482818288648193,秒 = 16754329210,inc= 1}

当我从 document.getClusterTime().toString() 读取值时,返回的值是 bson 时间戳。我想将其转换为 UTC 时间格式。

java mongodb timestamp change-data-capture
2个回答
3
投票

BSON 时间戳值是一个 64 位数字,其中前 32 位表示自 Unix 纪元 1970 年 1 月 1 日 00:00 UTC 以来的秒数。

下面是 mongoDB 文档的摘录:

时间戳

BSON 有一个特殊的时间戳类型供 内部 MongoDB 使用 并且与常规日期类型无关。这个内部 时间戳类型是一个 64 位值,其中:

  • 最高有效 32 位是一个
    time_t
    值(自 Unix 纪元)
  • 最低有效 32 位是递增的
    ordinal
    用于给定秒内的操作。

举个例子:

    long timestampValue = 6_948_482_818_288_648_193L;
    
    long unixTimestamp = timestampValue >> 32;
    Instant timestamp = Instant.ofEpochSecond(unixTimestamp);
    
    System.out.println(timestamp);

输出:

2021-04-07T18:22:07Z

打印结果采用 UTC 格式,由尾随

Z
表示。

链接: BSON 类型 - MongoDB 手册


0
投票

我找不到任何相关文档,但我这样解决了:

BsonTimestamp
转换为 java
Date
:需要乘以 x 1000 才能得到毫秒,然后在 Date 构造函数中使用它

new java.util.Date((long)document.getTimestamp("clusterTime").getTime() * 1000)

BsonDateTime

相同
new java.util.Date((long)document.getTimestamp("clusterTime").getTime() * 1000)

源代码(mongo-java-driver)

© www.soinside.com 2019 - 2024. All rights reserved.