Зависит от требуемой точности значения времени и его максимального диапазона.
При хранении наносекунд в 64-разрядном целом числе без знака диапазон составляет около 584 лет (2 ^ 64 нс), поэтому он достаточно точный и достаточно длинный для любого практического применения.
Преимущество использования формата с плавающей запятой заключается в том, что могут храниться как очень маленькие, так и очень большие значения с более высокой абсолютной точностью для меньших значений. Но с 64 битами это, вероятно, не проблема в любом случае.
Если значение времени является абсолютным моментом времени, а не продолжительностью, формат преобразования также должен определить, какую дату / время обозначает значение 0. (то есть эпоха)
Получить текущее время в UNIX-подобной системе можно, например, с помощью gettimeofday()
, который возвращает структуру со значением секунд и микросекунд. Затем его можно преобразовать в одно 64-битное целое число, дающее значение в микросекундах. Время для UNIX - 1 января 1970 года, 00:00:00 UT. (Функция clock()
измеряет не реальное время, а время, в течение которого процессор был активен.)
Когда значение времени для того же транспортного формата генерируется на другой платформе (например, Windows с GetSystemTime()
, его необходимо будет преобразовать в ту же единицу и эпоху.
Поэтому для транспортного протокола необходимо исправить следующие вещи:
- Единица измерения времени (мс, сша, ...) в зависимости от требуемой точности и диапазона
- Если время является точкой времени, а не продолжительностью, Epoch (дата и время значения 0)
- Хранится ли оно в целом числе (без знака или со знаком, если это длительность может быть отрицательной) или в виде числа с плавающей запятой
- Порядковый номер 64-битного значения
- Если используется плавающая точка, формат значения с плавающей точкой (обычно IEEE 754)
Поскольку разные платформы имеют разные API для получения текущего времени, вероятно, для правильной конвертации значения времени всегда потребуется некоторый код, но это тривиально.