首页 > 解决方案 > 在 OCaml 中以毫秒精度获取当前秒数

问题描述

我想以毫秒精度获得当前的秒数。有效值可以是:23.43251.027等,整数部分在 1-60(分钟中的秒数)范围内,小数部分是毫秒 (0-999)。

我发现标准库可以通过执行以下操作给我几秒钟:

let t = Unix.localtime (Unix.time ())
Printf.printf "Current seconds value %02d\n" t.tm_sec

但是使用这种方法我没有得到毫秒。我可以使用 获得毫秒精度(甚至更多)Unix.gettimeofday (),但是我必须弄清楚如何将该值的小数部分添加到当前秒数,这对于这种简单的操作来说似乎很麻烦。有没有更好的办法?

标签: timeocaml

解决方案


Unix.gettimeofday ()如果您在分钟中的秒数为 0 并且所有后续分钟都为 60 秒时建立基本时间,则可以使用。最后一个闰秒是在 2016 年。因此,您可以询问(例如)2017 年 1 月 1 日开始的时间并将其用作您的基准。

我尝试了以下方法,它似乎对我有用:

let (base, _) = Unix.mktime {
    tm_sec = 0;
    tm_min = 0;
    tm_hour = 0;
    tm_mday = 1;
    tm_mon = 0;
    tm_year = 117;
    tm_wday = 0;
    tm_yday = 0;
    tm_isdst = false;
}

let seconds_in_minute () =
    mod_float (Unix.gettimeofday () -. base) 60.0

换句话说,一个快速测试表明,当我的计算机上显示的时间转到下一分钟时,该值又回到了 0.0。

这应该一直有效,直到时间领主添加下一个闰秒。也许这对您的目的来说已经足够了。


推荐阅读