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

java – JSTL和时区

发布时间:2020-12-15 05:22:40 所属栏目:Java 来源:网络整理
导读:我对时区有一些疑问.我们以UTC时间存储所有日期,但我们需要在本地(美国东部)时间和UTC同时显示其中一些日期. 这是我的测试,我有UTC的日期,并希望以UTC和当地时间显示它: html!-- let's assume this date is in UTC,I get it from Database in my code --jsp
我对时区有一些疑问.我们以UTC时间存储所有日期,但我们需要在本地(美国东部)时间和UTC同时显示其中一些日期.

这是我的测试,我有UTC的日期,并希望以UTC和当地时间显示它:

<html>
<!-- let's assume this date is in UTC,I get it from Database in my code -->
<jsp:useBean id="dateValue" class="java.util.Date" />

GMT
<fmt:formatDate value="${dateValue}" pattern="yyyy-MM-dd HH:mm:ss z" timeZone="GMT"/>
</html>
<!-- Displays the original time +4  - not what I need-->

No time zone
<fmt:formatDate value="${dateValue}" pattern="yyyy-MM-dd HH:mm:ss z"/> 
<!-- Displays the original time,but timezone is EDT -->

US/Eastern
<fmt:formatDate value="${dateValue}" pattern="yyyy-MM-dd HH:mm:ss z" timeZone="US/Eastern"/> 
<!-- Displays the original time,timezone is EDT,I need original + 4 -->

</html>

重申:
我有一个来自数据库的UTC时间,想要格式化它并以UTC时区显示.服务器以UTC之外的其他时区运行.

基本上我需要一个像这样的功能

convertToTimezone(date,originalTimeZone,desiredTimeZone).

fmt:formatDate提供的是什么

convertToTimezone(date,serverTimeZone,desiredTimeZone).

我可以破解它,但是这通常会在节省日光时间时引起问题等.

附:
对于那些寻找答案的人来说 – 要做的一件事就是以UTC运行服务器,那么转换就可以了.如果不能改变它,唯一的方法是用UTC时区创建新的日期,明确地做,我自己转换我的文本时间,然后创建一个新的日期并提供文本和UTC时区.如果不这样做,则从服务器读取时区.

解决方法

我不明白你的问题.一切正常.您似乎期待新的Date()将计算机时间视为GMT,即格林尼治标准时间19:21.这是错的.它根据计算机的时区计算实际GMT时间. fmt:setTimeZone不会更改计算机的时区,也不会更改新Date()的结果. fmt:setTimeZone只设置由fmt:formatDate格式化的所有日期的默认时区.仅当计算机的时区不是GMT时才强制执行此操作.

删除fmt:setTimeZone,您将看到日期(错误地)关闭4小时.然后使用-Duser.timezone = UTC启动服务器(以覆盖默认的计算机时区),您将再次看到它是正确的.还可以尝试使用DB中的实际日期而不是新的Date().

无论如何,在UTC以外的时区运行服务器是一种不好的做法.它只会导致所有颜色的麻烦.我强烈建议以UTC格式运行服务器.如果由于某种原因不想更改计算机的时区,则可以通过将-Duser.timezone = UTC添加到服务器的VM参数来实现.始终使用UTC并仅在您将时区显示给最终用户时应用时区.另见DST and Timezone best practices.

(编辑:李大同)

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

    推荐文章
      热点阅读