Это правильный путь, или вы могли бы порекомендовать мне другой вариант?
Без опыта работы с 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