通过JPA加载joda即时字段时时区错误
在我的Play应用程序中,我有一个模型,其中创建的字段类型为Instant。它使用@PrePersist钩子填充,该钩子只将它设置为一个新的瞬间。默认时区被正确检测为US/Chicago,当持久化到mysql时,它将显示在datetime字段中的同一时区中 但是,当从数据库读回对象并显示时间时,它将以UTC而不是本地时间显示。我目前正在使用通过JPA加载joda即时字段时时区错误,jpa,playframework,jodatime,Jpa,Playframework,Jodatime,在我的Play应用程序中,我有一个模型,其中创建的字段类型为Instant。它使用@PrePersist钩子填充,该钩子只将它设置为一个新的瞬间。默认时区被正确检测为US/Chicago,当持久化到mysql时,它将显示在datetime字段中的同一时区中 但是,当从数据库读回对象并显示时间时,它将以UTC而不是本地时间显示。我目前正在使用 ${org.joda.time.format.DateTimeFormat.forStyle("SS").printTo(out, object.creat
${org.joda.time.format.DateTimeFormat.forStyle("SS").printTo(out, object.created)}
作为Joda的新手和JPA的新手,我不确定这是否是Joda的问题,JPA的问题,我是否应该使用不同的Joda类型,不同的mysql类型,或者我是否完全错了。有人能给我指出正确的方向吗?根据UTC似乎是参考时区。您始终可以使用withZoneDateTimeZone方法在其自身上更改。以下代码输出美国/芝加哥的日期,该日期似乎是joda zime的日期:
${org.joda.time.format.DateTimeFormat.forStyle("SS").withZone(org.joda.time.DateTimeZone.forID("America/Chicago")).printTo(out, object.created)}
按照,您还可以使用DateTimeZone.setDefaultDateTimeZone.forIDAmerica/Chicago为joda设置默认时区;但我一直认为,使用VM参数指定默认时区也很有效,应该是更好的选择。您是否尝试过设置播放的默认时区?类似于-Duser.timezone=US/Chicago这样的额外VM参数。@seb在使用play命令运行时可以这样做吗?如果它已经检测到了正确的时区,会有什么不同吗?是的,你可以在任何播放命令后附加它。未正确检测到有关默认时区的部分,将在一秒钟内写出正确答案