【发布时间】:2017-10-27 21:22:05
【问题描述】:
我得到了两次戳记,我想在几秒钟内知道它们的区别。两个时间戳都接近
5-9-2012 17:42:01
几小时内(7 小时)。
从信号 1 开始,我们有一个 18 位的时间戳 (6.348246372197819e+17)。时间戳从 1.JAN.0001 开始以 100 纳秒计算。我猜它是.NET 时间戳(如果有人知道那个时间戳的具体名称,那就太好了)。 (从戳中查看timestr:)
TS1=System.DateTime(int64(TS_signal1));
TS1.ToString
从信号 2 开始,我们有一个 16 位的时间戳 (735117.446046926)。 (我猜来自 Matlab datenum 的序列号)。如果我没记错的话,Datenum 是从 0.JAN.0000 开始的小数天。
时间戳 1 可以通过乘以 10^-7(100Ns 分辨率)轻松转换为秒。
时间戳 2 是通过乘以 24*3600 来转换的,对吗? (哪个分辨率有datenum [10ms?]?乘法后序列号是浮点数:63514147338.4544)
现在,问题是时间戳不会同时开始计数。我也没有关于 18 位时间戳(闰秒等)的信息。我试图通过从 18 位信号(顶部显示的日期)创建已知日期字符串的 datenum 时间戳来获得差异。然后我在秒级上减去了两者。差值是 21427199.0218048
计算:
test=datenum('5-9-2012 17:42:01')% use date of 18 digit for datenum
test=test*24*3600 % convert to seconds
test-timestamp_18digits*10^(-7)
现在的问题是,如果我将它添加到信号 2 datenum 时间戳并减去信号 1 18digit*10^-7 时间戳,我会得到 10281617.4543686 秒的巨大差异,而它应该是 7 小时 + 几秒。
计算: `
...; % Get Signal 1 and 2 timestamps
TS_signal2_s=timeStartCam*24*3600+7*3600;
TS_signal2_s=TS_signal2_s+21427199.0218048; % adding the difference of the time stamps
offset_signals =TS_signal2_s-TS_signal1*(10^-7);%100ns`
有人提示我正在犯的错误吗?
我已经尝试了很多。任何帮助表示赞赏。 提前非常感谢。
附言我不能快速回答。请耐心等待。
【问题讨论】:
-
我看到一个问题开始了:
TS_signal1存储的开头是什么?如果它存储为双精度,那么您从一开始就会遇到精度问题。正如here 所讨论的,double 可以可靠存储的最大整数是2^53,或者比9e15多一点。 18 位时间戳不太可能准确表示(即,将有大量舍入到最接近的可表示整数值)。如果它以int64或uint64开头,那么你会很好。 -
感谢您的建议。从现在开始,我会将其存储为 int64。虽然这应该不是问题,因为我只想要第二级(~9e10)的精度。
标签: .net matlab datetime timestamp data-conversion