【发布时间】:2015-06-23 17:14:16
【问题描述】:
我需要以整数秒为单位获取时间戳,它不会翻转。 可以是经过的 CPU 秒数,也可以是经过的时钟或纪元秒数。
'clock' 以年...秒为单位给出日期/时间向量。 但我不知道如何将其转换为整数秒。
cputime 返回经过的整数秒,但“这个数字可能会溢出内部表示并环绕。”。
【问题讨论】:
我需要以整数秒为单位获取时间戳,它不会翻转。 可以是经过的 CPU 秒数,也可以是经过的时钟或纪元秒数。
'clock' 以年...秒为单位给出日期/时间向量。 但我不知道如何将其转换为整数秒。
cputime 返回经过的整数秒,但“这个数字可能会溢出内部表示并环绕。”。
【问题讨论】:
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。
【讨论】:
num2str(round(3600 * 24 * now)) 或fprintf('%i\n', round(3600 * 24 * now)) 以查看结果...