Если вы прочитали документацию , javado c из Timestamp.valueOf(LocalDateTime dateTime)
говорит:
Предоставленный LocalDateTime
интерпретируется как местное время и дата в местном часовом поясе .
Начиная с LocalDateTime
в UT C часовом поясе, а не местный часовой пояс, результатом является сдвиг часового пояса к часовому поясу JVM по умолчанию. Если вы удаляете ZoneOffset.UTC
из вызова now()
или используете вместо него ZoneId.systemDefault()
, он будет работать так, как вы ожидали.
В качестве альтернативы, если у вас есть LocalDateTime
в UT C, и хотите преобразовать в Timestamp
, вам нужно сказать, что LocalDateTime
в UT C:
LocalDateTime ldt = LocalDateTime.now(UTC); // cannot change time zone
long millis = Timestamp.from(ldt.atZone(UTC).toInstant()).getTime(); // so specify time zone
Конечно, значения все равно не обязательно будут равными, поскольку между двумя вызовами может пройти несколько миллисекунд.