Отображение обновленного времени NTP в Java
В настоящее время я пишу NTP-клиент и сервер на Java. Я рассчитываю смещение и задержку туда и обратно, используя временные метки NTP. Я должен указать, что я вычисляю их для секунд (первые 32 бита) и фракций (вторые 32 бита) отдельно. Я получаю результаты смещения, такие как 0 секунд и 1859395165 дробей.
Мой вопрос заключается в том, как я могу использовать эти смещения для распечатки того, каким будет мое системное время, если оно было скорректировано в соответствии с заданным смещением?
Я думал, что мог бы просто добавить дроби в часть дробей временной метки для текущего времени моей системы, но если бы сумма дробей была больше 1 секунды, я думаю, что я столкнулся бы с проблемами, поскольку мои секунды были бы тогда неправильными.
1 ответ
Вы можете сначала преобразовать дробь в миллисекунды, а затем выполнить вычисления. Затем предположим, что вы вернули время 11:05:21:900 с сервера и смещение составило 200 мс. Затем вы просто добавляете это к 11:05:21:900 и получаете 11:05:22:100.
Вам просто нужна функция, которая проверяет, если вы нажмете новую секунду / минуту / и т. Д. После добавления смещения. Начало этого кода может выглядеть следующим образом.
systemMs += offsetMs;
if (systemMs >= 1000)
{
systemS += 1;
systemMS -= 1000;
if (systemS >= 60)
{
etc
}
}