LocalDateTime
- это, как следует из названия, локальная дата и время. Это зависит от часового пояса, настроенного на машине. Машина, вероятно, работает в UTC + 8. Чтобы получить дату и время без часового пояса, например getLastModifiedTime()
, используйте Instant.now()
вместо LocalDateTime.now()
.
В качестве альтернативы вы можете преобразовать Instant
, возвращаемое getLastModifiedTime(...).toInstant()
, в ваше местное время:
Instant modified = Files
.getLastModifiedTime(Paths.get(directory, filename))
.toInstant();
LocalDateTime modifiedDateTime = modified
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
, где ZoneId.systemDefault()
- это настроенный по умолчанию часовой пояс системы. Вы также можете использовать фиксированный часовой пояс, например ZoneId.of("CST")
для стандартного времени Китая. Но я настоятельно рекомендую всегда работать с Instant
, где это возможно, потому что тогда вы не сможете случайно сравнить даты и времени с разных временных отметок и избежать ошибок из-за разных сред, в которых выполняется код.