java.time
Я предполагаю, что вы запрашиваете java.sql.Timestamp
для использования с вашей базой данных SQL.В большинстве случаев вам не следует об этом просить.Класс Timestamp
плохо спроектирован и сильно устарел, и современный драйвер JDBC или реализация JPA будут рады принять вместо него тип из java.time, современного Java-API даты и времени.
long millisValue = 1_554_052_265_830L;
Instant i = Instant.ofEpochMilli(millisValue);
i = i.truncatedTo(ChronoUnit.SECONDS);
System.out.println(i);
2019-03-31T17: 11: 05Z
Я не знаю, почему вы хотели урезать до секунд, но вы можете видеть, что это было сделано (или легко уйти)из этой строки).
Некоторые драйверы JDBC принимают Instant
напрямую, когда вы передаете его в PreparedStatement.setObject
(одна из перегруженных версий этого метода), даже если спецификация JDBC этого не требует.Если у вас нет, используйте OffsetDateTime
.Преобразуйте так:
OffsetDateTime odt = i.atOffset(ZoneOffset.UTC);
System.out.println(odt);
2019-03-31T17: 11: 05Z
Вы можете видеть, что значение остается прежним, отличается только тип.
Что я должен исправить в своей реализации, чтобы преобразовать секунды в метку времени, чтобы полученная метка времени выглядела как 2019-03-31 11:45:06
?
Во-первых, как я уже сказал, вы должныисправить ваш код, чтобы не требовать Timestamp
, но вы также просите невозможного.Насколько я знаю, Timestamp.toString
всегда будет производить по крайней мере один десятичный знак в секундах, поэтому он будет выглядеть как 2019-03-31 11:45:06.0
.
Если вам сделать , вам обязательно понадобится Timestamp
для устаревшего API, который вы не можете или не хотите менять прямо сейчас, конвертируйте Instant
от:
Timestamp ts = Timestamp.from(i);
System.out.println(ts);
2019-03-31 19: 11: 05.0
Не обманывайтесь тем, что время выглядит иначе (19:11 вместо 17:11).Timestamp
печатает в моем местном часовом поясе, который находится в Европе / Копенгагене, на 2 часа раньше, чем UTC с начала летнего времени (DST) 31 марта. Таким образом, у нас все еще есть тот же момент времени.
Ссылка: Учебное пособие по Oracle: Дата и время , объясняющее, как использовать java.time.