java – JSTL和时区
我对时区有一些疑问.我们以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> 重申: 基本上我需要一个像这样的功能 convertToTimezone(date,originalTimeZone,desiredTimeZone). fmt:formatDate提供的是什么 convertToTimezone(date,serverTimeZone,desiredTimeZone). 我可以破解它,但是这通常会在节省日光时间时引起问题等. 附: 解决方法
我不明白你的问题.一切正常.您似乎期待新的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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |