Time 在OCaml中以毫秒精度获取当前秒
我想以毫秒的精度得到当前的秒数。有效值可以是:23.432、51.027等,整数部分在一分钟内的1-60秒范围内,小数部分为0-999毫秒 我发现标准库可以通过执行以下操作为我提供秒数: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获得毫秒精度和更高的精度,但接下来我必须弄清楚如何将
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具有相同的第二部分。如果没有,请再试一次。