加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Grails问题的时区和格式化日期

发布时间:2020-12-15 02:30:51 所属栏目:Java 来源:网络整理
导读:希望有人可以帮助解决这个非常烦人的情况,我发现自己与Grails日期和时间时区作为我的理解并不完全. 为了描述这种情况,首先我在英国,该应用程序所在的服务器位于美国(CST) 用户登录我的应用程序,我有一个字段,其中包含他们的时区,其唯一目的是格式化可靠地适
希望有人可以帮助解决这个非常烦人的情况,我发现自己与Grails&日期和时间时区作为我的理解并不完全.

为了描述这种情况,首先我在英国,该应用程序所在的服务器位于美国(CST)

用户登录我的应用程序,我有一个字段,其中包含他们的时区,其唯一目的是格式化可靠地适合其位置的日期.

当应用程序启动时,我强制执行UTC的默认时区,并且我还在应用程序的其他地方使用了一些Joda日期,因此我将Joda DateTimeZone也设置为UTC.但是我只把Joda用于固定日期,这些日期在呈现时不应该改变.

所以在Bootstrap中我有TimeZone.setDefault(TimeZone.getTimeZone(“UTC”))

现在问题是,对于某些我希望在用户交互时记录的表,因此有一个名为“lastModified”的日期字段,并且当记录更新时,我只需将其设置为新的Date()

我正在使用ajax调用来呈现数据,而不是直接在GSP中显示它在控制器中预处理的字段,并且为了格式化,我创建了一个格式化程序

DateTimeZone dtz = DateTimeZone.forID(user.timeZone)
def DateTimeFormatter tzAwareLongFormatter = DateTimeFormat.forPattern('MM/dd/yyyy HH:mm').withZone(dtz);

我认为这将是完美的,日期将保持UTC,然后作为欧洲/伦敦的用户tz我会看到日期格式正确.

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

所以它的行为就像它存储的日期时间根据它在服务器位置的内容,即使我在Bootstrap.groovy中设置默认时间.

有什么我应该设置而不必诉诸于更改服务器时间本身?

解决方法

似乎在引导程序中设置默认TZ是不够的,我不得不添加

-Duser.timezone=UTC

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读