我正在尝试将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 / TIME [无 不支持TIMEZONE]
我的问题是,我想将偏移时间保存到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
日期时间设置的docker映像。
观察:
OffsetDatetime已正确保存(作为UTC)并正确检索。
OffsetTime 保存的时间不正确(应为10:00:00 +02:00
或11:00:00 +03:00
甚至08:00:00 +00:00
而非10:00:00 +03:00
,然后检索不正确!)
答案 0 :(得分:0)
使用JPA 2.2,您还可以在Postgresql中使用OffsetTime。
@Column(name = "offset_time", columnDefinition = "TIME WITH TIME ZONE")
private OffsetTime offsetTime;
这就是它存储在我的数据库中的方式:22:00:00.000000 +02:00