如何在整数秒内获取 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,now
returns从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
.
我需要得到一个整数秒的时间戳,它不会翻转。 可以是经过的 CPU 秒,或者经过的时钟或纪元秒。
'clock' 以年...秒为单位给出 date/time 向量。 但我不知道如何将其转换为整数秒。
cputime returns 经过整数秒但 "This number can overflow the internal representation and wrap around."。
round(3600 * 24 * now)
呢?
根据manual,now
returns从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
.