Я пытаюсь сохранить и извлечь java.time.OffsetTime
в PostgreSQL версии 10.5, последняя версия драйвера JDBC (v 42.2.5).
Время смещения сохранено, но с недопустимым смещением (требуется смещение сервера приложениявместо переданного смещения).
Согласно: https://jdbc.postgresql.org/documentation/head/8-date-time.html TIME WITH TIMEZONE
не поддерживается (пока?).
Обратите внимание, что ZonedDateTime, Instant и OffsetTime /ВРЕМЯ [БЕЗ ВРЕМЕНИ] не поддерживается
Мой вопрос: хочу ли я сохранить время смещения в Postgres, так какие есть альтернативы?
Примечание , я забочусь только о времени (это на самом деле расписание), но мне нужно также знать смещение для сравнения причин с current_time.
Мой пример:
public class Customer {
@Id
@GeneratedValue
private Long id;
private String name;
@Column(columnDefinition = "time with time zone")
private OffsetTime serviceTime;
@Column(columnDefinition = "timestamp with time zone")
private OffsetDateTime serviceDateTime;
private Instant createdDate = Instant.now();
}
Основной:
{
OffsetTime serviceTime = OffsetTime.parse("10:00+02:00");
OffsetDateTime serviceDateTime = OffsetDateTime.now().with(serviceTime);
System.out.println(serviceTime);
System.out.println(serviceDateTime);
Customer customer = new Customer().withName("wael")
.withServiceTime(serviceTime)
.withServiceDateTime(serviceDateTime);
System.out.println("customer: " + customer);
customerRepository.save(customer);
}
{
Customer dbCustomer = customerRepository.findById(1L).get();
OffsetTime dbServiceTime = dbCustomer.getServiceTime();
OffsetDateTime dbServiceDateTime = dbCustomer.getServiceDateTime();
System.out.println(dbServiceTime);
System.out.println(dbServiceDateTime);
System.out.println("from db customer: " + dbCustomer);
}
База данных:
id created_date name service_date_time service_time
1 2018-10-15 10:38:27.814000 wael 2018-10-15 08:00:00.000000 10:00:00 +03:00
Вывод:
10:00+02:00
2018-10-15T10:00+02:00
customer: Customer(id=null, name=wael, serviceTime=10:00+02:00, serviceDateTime=2018-10-15T10:00+02:00, createdDate=2018-10-15T07:10:59.900Z)
10:00+03:00
2018-10-15T11:00+03:00
from db customer: Customer(id=1, name=wael, serviceTime=10:00+03:00, serviceDateTime=2018-10-15T11:00+03:00, createdDate=2018-10-15T07:10:59.900Z)
Обратите внимание, часовой пояс моей машины равен +3 (следовательно, печатная информация из db равна +3), и мой сервер базы данных является образом докера с UTC
настройками даты и времени.
Наблюдения:
Время OffsetDatetime сохраняется правильно (как UTC) и извлечены правильно.
OffsetTime сохраняется неверно (должно быть 10:00:00 +02:00
или 11:00:00 +03:00
или даже 08:00:00 +00:00
не 10:00:00 +03:00
, а извлекается неверно!)