我需要获得一个整数秒的时间戳,不会翻转。 可以经过CPU秒,或经过时钟或纪元秒。
'clock'以年...秒为单位给出日期/时间向量。 但我无法弄清楚如何将其转换为整数秒。
cputime返回经过的整数秒,但“此数字可以溢出内部表示并回绕。”。
答案 0 :(得分:3)
round(3600 * 24 * now)
怎么样?
根据manual,now
返回自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
。