如何在整数秒内获取 Matlab 时间戳

how to get a Matlab timestamp in integer seconds

我需要得到一个整数秒的时间戳,它不会翻转。 可以是经过的 CPU 秒,或者经过的时钟或纪元秒。

'clock' 以年...秒为单位给出 date/time 向量。 但我不知道如何将其转换为整数秒。

cputime returns 经过整数秒但 "This number can overflow the internal representation and wrap around."。

round(3600 * 24 * now)呢?

根据manual,nowreturns从0年开始的天数,为浮点数。因此,乘以 86400 应该得到秒数。

通常最好使用定点格式来跟踪时间,但由于您只对整数秒感兴趣,所以这应该不是什么大问题。 now 由于浮点分辨率的时间分辨率可以这样找到:

>>  eps(now*86400)
ans =
   7.6294e-06

或将近 8 微秒。这应该足以满足您的用例。由于这些是 64 位浮点数,因此您不必担心在您的生命周期内回绕。

一个实际问题是自 0 年以来的秒数太大,无法在标准设置的 Matlab 提示符下打印为整数。如果这让你感到困扰,你可以做 fprintf('%i\n', round(3600 * 24 * now)),或者简单地减去一些任意数字,例如要获得自 2000 年以来的秒数,您可以这样做

epoch = datenum(2000, 1, 1);
round(86400 * (now - epoch))

当前打印 488406681.