Я использую hibernate для связи с базой данных postgresql для хранения данных для моделирования.В этих моделях существуют временные ряды, основанные на временных отметках без часового пояса.Теперь при загрузке меток времени, которые были созданы правильно (в данном случае для 2030 года), метка времени для 2030-03-31T02: 00 заканчивается как 2030-03-31T-03: 00 в базе данных в столбце, который являетсяметка времени без часового пояса.Я уже изменил конфигурацию базы данных, чтобы ее часовой пояс был UTC, но проблема остается.
Проблема, похоже, находится либо в драйвере (https://mvnrepository.com/artifact/org.postgresql/postgresql/42.2.5), либо в базе данных. При вставке метки времени в виде строки это работает. Также эта проблема возникает на локальной и удаленной БД.
Кроме того, hibernate находится в версии 5.4.2 (новейшей) и в моем файле persistence.xml я установил флаг:
<property name="hibernate.jdbc.time_zone" value="UTC"/>
Небольшой тест, который я написал, выглядит так:
@Test
public void testTimeShift() {
EntityManager em = JPAUtil.createEntityManager();
TimeStep timeStep = new TimeStep();
LocalDateTime.now(Clock.systemUTC());
LocalDateTime ldt = LocalDateTime.parse("2030-03-31T02:00:00");
timeStep.setTimeStamp(ldt);
SaveToDB.(timeStep, em);
em.close();
EntityManager em2 = JPAUtil.createEntityManager();
TimeStep timeStep2 = LoadFromDB.getTimeStep(ldt, em2);
if (timeStep.getTimeStamp() != timeStep2.getTimeStamp()) {
System.out.println(timeStep.getTimeStamp());
System.out.println(timeStep2.getTimeStamp());
throw new EmptyStackException();
}
}
Этот код возвращает следующее:
2030-03-31T02:00
2030-03-31T03:00
Process finished with exit code -1