Grails问题:时区和日期格式化

4
希望有人能帮助我解决Grails、日期和时区相关的非常恼人的问题,因为我的理解还不够完整。
首先,我在英国,应用所在的服务器在美国(CST)。
用户登录我的应用程序,我有一个字段用于保存他们的时区,唯一目的是可靠地格式化适合其位置的日期。
当应用程序启动时,我强制将默认时区设置为UTC,并且我还在应用程序中的其他地方使用了一些Joda Dates,因此我还将Joda DateTimeZone设置为UTC。但我只使用Joda来处理那些呈现时不应该改变的固定日期。
所以,在Bootstrap中,我有TimeZone.setDefault(TimeZone.getTimeZone(“UTC”))
现在是问题,对于某些表格,我想记录用户交互的时间,因此有一个名为'lastModified'的Date字段,当记录更新时,我只需将其设置为new Date()。
我使用ajax调用来呈现数据,因此与其在GSP中直接显示该字段,最好在控制器中进行预处理,并为格式化创建格式化程序。
DateTimeZone dtz = DateTimeZone.forID(user.timeZone)
def DateTimeFormatter tzAwareLongFormatter = DateTimeFormat.forPattern('MM/dd/yyyy HH:mm').withZone(dtz);

我本以为这会很完美,并且日期会保持UTC,但作为使用欧洲/伦敦时区的用户,我希望能正确地格式化日期。

然而,我得到的时间是+7小时。

因此,它似乎根据服务器位置存储了日期时间,即使我在Bootstrap.groovy中设置了默认时间。

是否有什么设置我可以进行,而无需改变服务器时间本身?


似乎在引导程序中设置默认的TZ不够,我必须将 -Duser.timezone=UTC 添加到JAVA_OPTS中,到目前为止,日期显示正确。 - David Brown
请将其发布为您对此问题的答案并标记为正确。 - Mike Sickler
1个回答

2
似乎在引导程序中设置默认的TZ并不足够,我还需要添加。
-Duser.timezone=UTC 

到JAVA_OPTS,目前为止,日期显示正确。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接