微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

解决方法

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

以下是 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 Types - MongoDB Manual

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。