Time 在OCaml中以毫秒精度获取当前秒

Time 在OCaml中以毫秒精度获取当前秒,time,ocaml,Time,Ocaml,我想以毫秒的精度得到当前的秒数。有效值可以是:23.432、51.027等,整数部分在一分钟内的1-60秒范围内,小数部分为0-999毫秒 我发现标准库可以通过执行以下操作为我提供秒数: let t = Unix.localtime (Unix.time ()) Printf.printf "Current seconds value %02d\n" t.tm_sec 但是用这个方法我不会得到毫秒。我可以使用Unix.gettimeofday获得毫秒精度和更高的精度,但接下来我必须弄清楚如何将

我想以毫秒的精度得到当前的秒数。有效值可以是:23.432、51.027等,整数部分在一分钟内的1-60秒范围内,小数部分为0-999毫秒

我发现标准库可以通过执行以下操作为我提供秒数:

let t = Unix.localtime (Unix.time ())
Printf.printf "Current seconds value %02d\n" t.tm_sec
但是用这个方法我不会得到毫秒。我可以使用Unix.gettimeofday获得毫秒精度和更高的精度,但接下来我必须弄清楚如何将该值的小数部分添加到当前秒数,这对于这样简单的操作来说似乎很麻烦。有更好的方法吗?

如果您确定了一个基准时间,即分钟中的秒数为0,并且所有后续分钟都是60秒长,则可以使用Unix.gettimeofday。上一次闰秒是在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

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

如果您确定了一个基准时间,即分钟中的秒数为0,并且所有后续分钟都是60秒长,则可以使用Unix.gettimeofday。上一次闰秒是在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


这应该一直有效,直到下一个闰秒被时间领主添加。也许这就足够满足您的需要了。

这是否回答了您的问题?看这回答了你的问题吗?请参阅开始时的gettimeofday、localtime和gettimeofday,并从中计算基数。第二个gettimeofday是当你得到的时间在x.999和x+1.001时检测比赛条件,第二个在你得到时间时发生了变化。确保两个gettimeofday具有相同的第二部分。如果没有,请重试。可能在开始时再次获取gettimeofday、localtime和gettimeofday,并从中计算基数。第二个gettimeofday是当你得到的时间在x.999和x+1.001时检测比赛条件,第二个在你得到时间时发生了变化。确保两个gettimeofday具有相同的第二部分。如果没有,请再试一次。