Конвертировать из joda. Время от времени. LocalDateTime это правильный путь? - PullRequest
0 голосов
/ 05 февраля 2019

Мне нужен формат отметки времени для моих дат в базе данных.На данный момент у меня есть joda.Datetime в базе данных, но также и в моем приложении restApi.

Я попытался создать новый столбец и преобразовал существующий joda.Datetime в другой столбец time.LocalDateTime.Также я заменил во всем коде joda.DateTime на time.LocalDateTime.

Это работает, но когда я делаю вызов get в почтальоне, я получил json вроде:

{
seconds: x1,
minutes: x2,
hours: x3,
days: x4,
........
}

Я думаюМне нужен конвертер, чтобы показать метку времени как "дд-мм-гг чч-мм-сс"

Я хочу иметь формат отметки времени в базе данных, чтобы иметь возможность выполнять стандартные операции SQL и именованные запросы во времени.

В моей базе данных у меня есть bytea тип для дат.Я использую PostgreSQL с DBeaver .

Это правильный путь, или вы могли бы порекомендовать мне другой вариант?

1 Ответ

0 голосов
/ 06 февраля 2019

Это правильный путь, или вы могли бы порекомендовать мне другой вариант?

Без опыта работы с PostgreSQL я должен сказать, что bytea - неправильный тип данных для ваших дат или временных отметок.timestamp with time zone хорошо и поддерживает операции и запросы SQL.Кроме того, у него есть то преимущество, что вы можете хранить OffsetDateTime (возможно, даже Instant, я не уверен) напрямую, поэтому вы избегаете форматирования своей временной метки для ее хранения.Это будет рекомендовано.

Чтобы отметка времени была отметкой времени, даты и времени суток недостаточно.Дата и время дня будут интерпретироваться по-разному в разных часовых поясах (и даже неоднозначно осенью, когда заканчивается летнее время и часы повернуты назад).Насколько я понял, timestamp with time zone будет следить за тем, чтобы метки времени сохранялись в UTC, поэтому будут однозначные моменты времени.В Java класс Instant представляет момент времени независимо от часового пояса, поэтому подходит для отметок времени.Некоторые драйверы JDBC позволяют хранить Instant непосредственно в столбце timestamp with time zone, другие требуют, чтобы вы сначала преобразовали в OffsetDateTime.В последнем случае используйте

OffsetDateTime dateTimeForDatabase = yourInstant.atOffset(ZoneOffset.UTC);

Редактировать: Обратите внимание, что бит with time zone является чем-то обманом, как отмечает @Jon Skeet в комментарии.База данных не хранит часовой пояс или смещение, она лишь обеспечивает сохранение даты и времени в UTC для устранения неоднозначности относительно момента времени.

Ссылка: Типы даты / времени в документации PostgreSQL

...