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

时间:2011-06-10 15:27:40

标签: jpa playframework jodatime

在我的Play应用程序中,我的模型的created字段为Instant。它使用@PrePersist挂钩填充,只需将其设置为new Instant()。默认时区被正确检测为US/Chicago,当持久保存到mysql时,它出现在同一时区(datetime字段中)。

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

显示它
${org.joda.time.format.DateTimeFormat.forStyle("SS").printTo(out, object.created)}

作为Joda的新手和JPA相当新,我不确定这是一个joda问题,JPA问题,如果我应该使用不同的Joda类型,不同的mysql类型,或者如果我要去关于这完全错了。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

根据API UTC似乎是参考时区。您始终可以使用withZone(DateTimeZone)方法在DateTimeFormat上更改它。以下代码输出美国/芝加哥的日期,似乎是joda-zime中的right timezone

${org.joda.time.format.DateTimeFormat.forStyle("SS").withZone(org.joda.time.DateTimeZone.forID("America/Chicago")).printTo(out, object.created)}

user guide之后,您还可以使用DateTimeZone.setDefault(DateTimeZone.forID("America/Chicago"));为joda设置默认时区,但我一直认为使用VM参数指定默认时区也适用,应该是更好的选择。