Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过JPA加载joda即时字段时时区错误_Jpa_Playframework_Jodatime - Fatal编程技术网

通过JPA加载joda即时字段时时区错误

通过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

在我的Play应用程序中,我有一个模型,其中创建的字段类型为Instant。它使用@PrePersist钩子填充,该钩子只将它设置为一个新的瞬间。默认时区被正确检测为US/Chicago,当持久化到mysql时,它将显示在datetime字段中的同一时区中

但是,当从数据库读回对象并显示时间时,它将以UTC而不是本地时间显示。我目前正在使用

${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命令运行时可以这样做吗?如果它已经检测到了正确的时区,会有什么不同吗?是的,你可以在任何播放命令后附加它。未正确检测到有关默认时区的部分,将在一秒钟内写出正确答案