Получение текущей секунды с точностью до миллисекунды в OCaml - PullRequest
0 голосов
/ 27 февраля 2020

Я бы хотел получить текущую секунду в минуту с точностью до миллисекунды. Допустимые значения: 23.432, 51.027, et c. с целочисленной частью в диапазоне 1-60 (секунд в минутах) и десятичной частью, равной миллисекундам (0-999).

Я обнаружил, что стандартная библиотека может дать мне секунды выполнив следующее:

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

Но с этим методом я не получаю миллисекунды. Я могу получить точность в миллисекундах (и даже больше), используя Unix.gettimeofday (), но затем мне нужно выяснить, как добавить десятичную часть этого значения к текущим секундам, что кажется громоздким для такой простой операции. Есть ли лучший способ?

1 Ответ

3 голосов
/ 27 февраля 2020

Вы можете использовать Unix.gettimeofday (), если вы установили sh базовое время, когда секунды в минуте были равны 0, и чтобы все последующие минуты имели длину 60 секунд. Последняя секунда была в 2016 году. Таким образом, вы можете запросить время (скажем) в начале 1 января 2017 года и использовать его в качестве своей базы.

Я попробовал следующее, и, похоже, это сработало для меня :

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, когда время, отображаемое на моем компьютере, перешло на следующую минуту.

Это должно работать до тех пор, пока Следующая секунда добавляется лордами времени. Может быть, этого будет достаточно для ваших целей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...