我通过使用将JodaTime DateTime字段存储到timestamptz列中org.jadira.usertype:usertype.jodatime:1.9。应用服务器的时区为+4。数据库服务器+9时区。new DateTime()会导致${currentTime+1hour}+9+9是时区(正确值为${currentTime+5hours)+9)。
DateTime
timestamptz
org.jadira.usertype:usertype.jodatime:1.9
new DateTime()
${currentTime+1hour}+9
${currentTime+5hours)+9
我还没有找到任何相关主题。java.util.Date正确存储。
java.util.Date
域对象具有以下映射属性:
static mapping = { dateCreated sqlType:'timestamptz' }
如何正确存储DateTime?
好。我已经花了8个小时来解决问题。如果您使用用户类型项目来保留JodaTime,则必须将class databaseZone属性设置为PersistentDateTime等于当前应用程序服务器时区(不是数据库!)。
databaseZone
PersistentDateTime
但是最好使用官方的hibernate支持。它解决了开箱即用的问题,因为默认情况下它用于java.utl.Date持久保存DateTime并java.util.Date正确保存
java.utl.Date