如何将日期参数分配给当前时区的休眠查询?

2022-09-01 04:19:44

将日期分配给指定的 SQL 参数时,Hibernate 会自动将其转换为 GMT 时间。如何使其对所有日期使用当前服务器时区?

假设您有一个查询:

Query q = session.createQuery("from Table where date_field < :now");
q.setDate("now", new java.util.Date());

“now”将设置为 GMT 时间,而“new Date()”将设置为您当前的服务器时间。

谢谢。


答案 1

事实证明,Hibernate不会自动将日期转换为GMT,如果您使用,它只会切断时间,因此,如果您传递“2009-01-16 12:13:14”,它将变为“2009-01-16 00:00:00”。query.setDate()

要考虑时间,您需要改用。query.setTimestamp("date", dateObj)


答案 2

休眠对时区一无所知。任何时区转换都应在执行查询之前完成。

例如,如果您的数据库服务器设置为 CST,但用户在 EST 上,则需要向作为查询输入的任何时间戳添加 1 小时。


推荐