gpt4 book ai didi

perl - 来自 MongoDB ISODate 对象的纳秒丢失

转载 作者:可可西里 更新时间:2023-11-01 09:59:19 25 4
gpt4 key购买 nike

我从 ISODate 对象的 MongoDb 接口(interface)中丢失了纳秒。当我在 perl 中读取它们时,所有纳秒都设置为零。

首先是我的环境:

MongoDB version: 1.8.2 
perl v5.12.4
MongoDB perl module version: 0.701.4

我有一个将 rtcTime 编码为 ISODate 的 Mongo DB,如下所示:

"rtcTime" : ISODate("2013-05-13T18:54:55.918Z")

提取 rtcTime 的代码如下所示:

my @results = $db->get_collection( 'timings' )->find( )->all(); 
foreach my $record ( @results )
{
print $record->{rtcTime}->nanoseconds()."\n";
}

输出全为0。

要完全重现该问题,请在 MongoDB 数据库中创建一个具有任意(非零)hires_epoch 值的 ISODate 对象。然后尝试使用 MongoDB/DateTime/DateTime::Format::ISO8061 模块来提取任何类型的雇用时间数据。

问:为什么我无法从 MongoDB ISODate 数据中获取毫秒、微秒或纳秒?

最佳答案

MongoDB 以 BSON 格式存储文档及其 specification说:

BSON Date is a 64-bit integer that represents the number of milliseconds since the Unix epoch (Jan 1, 1970).

因此,日期精度仅限于毫秒。如果你真的需要存储纳秒,你不应该使用日期类型。您必须使用 long 并存储时间戳,这样您就不会失去精度。

关于perl - 来自 MongoDB ISODate 对象的纳秒丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17476176/

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