Есть ли эквивалент System.nanoTime(), который не меняется при изменении системного времени?

По крайней мере, на моем компьютере с Linux изменение системного времени влияет на System.nanoTime(), что делает ненадежным определение интервала, если системное время изменяется в течение этого интервала.

Есть ли эквивалент этой функции, не зависящий от времени системы?


person Winter    schedule 17.07.2021    source источник
comment
Под изменением времени подразумевается изменение часового пояса или фактического времени?   -  person Matt    schedule 17.07.2021
comment
Изменение фактического времени, а не часового пояса. Изменение часового пояса не влияет на System.nanoTime() в моей системе. В идеале он должен быть независим от любых подобных системных изменений.   -  person Winter    schedule 17.07.2021
comment
Я думаю, что ответ — нет. Там, где это возможно, nanoTime использует монотонные часы, но это не всегда возможно. (Это зависит от того, что предоставляет ОС.) См. stackoverflow.com/questions/1937619.   -  person Stephen C    schedule 17.07.2021
comment
Поэтому, если вам абсолютно необходимо измерять время таким образом, чтобы он не поддавался корректировкам системного времени, отключите корректировки. Например, если ваша ОС использует systemd, остановите ntp.service.   -  person Stephen C    schedule 17.07.2021
comment
Если вы не можете полагаться на собственные часы компьютера, вам необходимо использовать внешний источник времени. Существует множество серверов времени, предоставляющих API веб-сервиса, так что удачи вам в их изучении, чтобы найти тот, который лучше всего соответствует вашим потребностям.   -  person Andreas    schedule 17.07.2021
comment
Я никогда не пробовал это, но, возможно, дешевый USB-ключ GPS может обеспечить независимый источник времени.   -  person tgdavies    schedule 17.07.2021
comment
К сожалению, многие операционные системы не различают понятия, который сейчас час? и сколько времени на самом деле прошло?. Для последнего вам нужен счетчик, который увеличивается равномерно, пока система работает, независимо от первого. System.nanoTime() — это не то, что вам может понадобиться, но это то, с чем мы застряли.   -  person iggy    schedule 17.07.2021