【问题标题】:how to get a Matlab timestamp in integer seconds如何在整数秒内获取 Matlab 时间戳
【发布时间】:2015-06-23 17:14:16
【问题描述】:

我需要以整数秒为单位获取时间戳,它不会翻转。 可以是经过的 CPU 秒数,也可以是经过的时钟或纪元秒数。

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

cputime 返回经过的整数秒,但“这个数字可能会溢出内部表示并环绕。”。

【问题讨论】:

    标签: matlab time


    【解决方案1】:

    round(3600 * 24 * now) 呢?

    根据manualnow 以浮点数形式返回自 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

    【讨论】:

    • 它总是为我返回 7.6294e-06。而 round(3600*24*now) 总是返回 6.3602e+10。永不改变。
    • @DougNull 它确实发生了变化,但是您在 E 表示法中看不到它。您可以转到 Preferences -> Command Window -> Numeric format 并将其更改为“long g”(由未记录的 matlab 推荐)
    • @DougNull 如果您等待 100 年,时间分辨率只会发生显着变化。而且您看不到整数秒只是一个打印问题,请执行num2str(round(3600 * 24 * now))fprintf('%i\n', round(3600 * 24 * now)) 以查看结果...
    • 太棒了! round(3600 * 24 * now) 现在可以工作了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 2017-07-24
    • 2013-06-22
    • 2016-09-22
    • 2017-02-05
    • 2020-03-11
    • 1970-01-01
    相关资源
    最近更新 更多