время смещения (время с часовым поясом) в jdbc PostgreSQL - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь сохранить и извлечь 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, а извлекается неверно!)

...