gpt4 book ai didi

java - JPA/Hibernate order by of a Joda time of the day 在香港无法正常工作

转载 作者:行者123 更新时间:2023-11-29 12:47:58 27 4
gpt4 key购买 nike

我的问题是,当我使用 startTime 的顺序对数据库进行查询时,其中 startTime 是一个 Joda 时间,它返回从下午 4 点开始的时间。

现在,下午 4 点距离午夜 12 点刚好 8 小时,巧合的是我住在香港,那是我的时区,香港时区距离午夜 8 小时。

我的 startTime JPA 字段是:

@Index(name = "bookingStartTimeIndex")
@Column(name = "start_time")
@Type(type="org.joda.time.contrib.hibernate.PersistentLocalTimeAsTime")
private LocalTime startTime;

我使用 JPA/Hibernate,我的查询基本上是选择 * where:

order by b.startTime asc

现在,我将时间为上午 9 点到下午 6 点的实体存储在该表中。从这个“order by”返回的是从下午 4 点开始到下午 6 点然后从上午 9 点到下午 4 点的实体。所以看起来它以某种方式决定下午 4 点是午夜。

这是一个 postgresql 数据库,当我查看我的数据库时,colum 的数据类型为 time_without_time_zone。

那么我怎样才能让它在上午 9 点到下午 6 点之间正常订购实体呢?


我发现的解决方法是更改​​为使用 PersistentLocalTimeExact,这适用于我在我提到的条件下解决了我在下午 4 点遇到的所有问题...

@Index(name = "bookingStartTimeNumberIndex")@Column(name = "start_time_number", nullable = true)@Type(type="org.joda.time.contrib.hibernate.PersistentLocalTimeExact")私有(private)本地时间开始时间编号;

最佳答案

这听起来像是一个数据呈现的问题,而不是一个基本问题,尽管它有点不清楚。

您是说数据库中时间为 0:00 的记录在从数据库中取回时显示为 16:00?如果是这样,那么我认为从数据库中读取日期会有些困惑,并且在 Hibernate 扩展中的某个地方,Joda Time 正在创建 LocalTime 实例,假设数据库时间是 UTC,然后创建 LocalTime 与您本地的时区,因此应用 -8 小时偏移量。

正如 Erwin 所说,在数据库中存储时区是更好的方法,或者如果您不能这样做,则只存储 UTC 日期和/或时间。

我查看了 Joda Time网站,他们推荐 different与您正在使用的原始扩展相比,Hibernate 扩展得到更好的支持。

您也可以尝试在 PersistentLocalTimeAsTime 类上设置断点,看看 LocalTime 是如何构建的。

关于java - JPA/Hibernate order by of a Joda time of the day 在香港无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8644910/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com