Timestamp и Timespan эквивалент в java .time пакете в Java 8 - PullRequest
0 голосов
/ 11 апреля 2020

Здравствуйте, я прочитал статью о новом java .time пакете. И некоторые статьи говорят, что мы не должны использовать семейство java .util.Date. Мы можем использовать offsetDateTime или LocalDateTime вместо java .util.Date. И мне интересно, что мы должны использовать вместо Timestamp в новом java .time пакете? Когда я проверяю метку времени, используйте

public class Timestamp extends java.util.Date

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

Существует два типа промежутков времени в Java 8:

  • Период - представляет разницу во времени между двумя точками в годах, месяцах, днях
  • Длительность - представляет время длительность - фактический физический промежуток времени, не зависящий от времени начала

Например, «период» в 1 месяц будет 30 дней в апреле, 31 мая, поэтому значения могут рассчитываться по-разному в разных контекстах. Также учитываются изменения часового пояса (переход на летнее время). Длительность определенного количества секунд, минут, часов, дней не будет зависеть от контекста. Например, 30 дней всегда будут 30 днями.

У вас есть хорошее описание в do c: https://docs.oracle.com/javase/tutorial/datetime/iso/period.html

0 голосов
/ 12 апреля 2020

Эквивалент отметки времени

Я предполагаю, что вы имеете в виду устаревшие 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, либо простое число дней.

Ссылки

...