Эквивалент отметки времени
Я предполагаю, что вы имеете в виду устаревшие java.sql.Timestamp
и / или timestamp
(без часового пояса) и timestamp with time zone
типы данных SQL. Первый был разработан для использования с последними двумя. Ответ для них разный.
Для отметки времени в SQL timestamp with time zone
явно рекомендуется, поскольку она на самом деле однозначно определяет момент времени, который находится в определении того, что такое отметка времени. Для timestamp with time zone
вы должны использовать класс java .time, который вы уже упомянули, OffsetDateTime
. Некоторые драйверы JDB C и реализации JPA также принимают Instant
.
На большинстве диалектов SQL простой timestamp
- это дата и время дня с высоким разрешением (например, микросекунды) без времени зона. Отсутствие часового пояса не определяет момент времени, поэтому на самом деле его называют временной меткой ie. В любом случае соответствующий java .time тип является другим упомянутым вами классом, LocalDateTime
.
Все упомянутые классы java .time имеют разрешение наносекунд. Я не знаю ни одного SQL диалекта, который потребовал бы большего.
Вы полностью правы. Мало того, что java.util.Date
плохо спроектирован и давно устарел. Timestamp
настоящий хак на вершине этого класса. Я рекомендую вам не использовать ни один из них.
Эквивалент промежутка времени
Артур Ольшак в другом ответе уже хорошо дал основу Period
и Duration
. Мне не нужно повторять это. В качестве дополнения, имейте в виду, что, хотя Duration
имеет методы для конвертации в и из числа дней, он не очень подходит для дней, так как предполагает, что день всегда 24 часа, что не всегда случай из-за летнего времени (DST) и других аномалий. Как только вам нужно посчитать дни, я рекомендую либо Period
, либо простое число дней.
Ссылки