Точность отличается тем, что LocalDateTime.now()
использует системное значение по умолчанию Clock
.
Получает текущую дату и время из системных часовв часовом поясе по умолчанию.
Это запросит системные часы в часовом поясе по умолчанию, чтобы получить текущую дату и время.
...
Ссылка в этом Javadoc приведет вас к Clock.systemDefaultZone()
, в котором говорится ( выделение мое):
Получает часы, которые возвращают текущий момент с использованием наилучших доступных системных часов, преобразовывая их в дату и время с использованием часового пояса по умолчанию.
Эти часы основаны на лучших доступных системных часах. Может использоваться System.currentTimeMillis () или часы с более высоким разрешением, если они доступны.
...
КакиеЧасы, которые использует Java, могут зависеть от многих вещей, и похоже, что у вашего компьютера Mac есть часы с точностью микро секунды, тогда как у вашего компьютера с Windows есть часы с точностью милли секунды.Я не знаю ни одного способа увеличить точность часов, но вы определенно можете уменьшить точность, чтобы она соответствовала на разных платформах.
Один из вариантов -сделать как Оле В.В. в своем ответе и использовать LocalDateTime.truncatedTo(TemporalUnit)
.
Другой вариант - подключить свой собственный Clock
и использовать LocalDateTime.now(Clock)
.Если возможно, я бы использовал Clock.tickMillis(ZoneId)
, так как этот метод возвращает Clock
, который усекается до миллисекунд.
Получает часы, которые возвращают текущий мгновенный тик в полных миллисекундах, используялучшие из доступных системных часов.
Эти часы всегда будут иметь поле нано секунды, обрезанное до миллисекунд.Это гарантирует, что видимое время тикает в целых миллисекундах.Базовые часы являются лучшими доступными системными часами, эквивалентными использованию system (ZoneId).
...
С:
9