我遇到了一些非常奇怪的事情。如果我在控制器中打印新的Date(),则输出为UTC格式(这就是我想要的)。但是当我从grails gsp打印新的Date()时,日期是EDT格式并且已关闭。
我通过Tomcat 7在CentOS Linux 6.5上运行我的应用程序。系统日期和硬件日期使用UTC。
这是我的Java版本:
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
我尝试添加:
TimeZone.setDefault(TimeZone.getTimeZone("UTC"))
到我的引导程序,但它仍然没有在视图中使用UTC。
基本上我希望所有内容都使用UTC,但唯一的一次是在我从视图中打印新的Date()时。
有什么想法吗?
编辑:
我不相信formatDate会对我有用,因为我实际上并不只是显示用户的日期。我将新的Date()对象与另一个日期进行比较。我刚刚在回复中打印了日期,因为我想知道为什么比较日期不起作用。以下是我使用新的Date()对象的代码段:
<g:set var="dateNow" value="${new Date()}" />
<g:if test="${ticket.ticketEndDate.before(dateNow)}">
<div>
Ticket closed on ${ticket.ticketEndDate.format('EEE MMM dd, yyyy hh:mm a')}.
</div>
</g:if>
答案 0 :(得分:4)
您不应在GSP中使用${new Date()}
之类的内容来向响应呈现日期。您应该使用<g:formatDate>
标记,当您这样做时,您可以指定一个格式字符串,该字符串具体表示您希望格式化日期的方式。有关示例和详细信息,请参阅http://grails.org/doc/latest/ref/Tags/formatDate.html。
答案 1 :(得分:1)
时区仅影响格式化为字符串时日期的显示方式。
Date对象存储自1970年1月1日UTC以来的毫秒数。 并且在比较日期时使用该值。
您可以致电Date.getTime()
有关更详细的说明,请参阅此答案:https://stackoverflow.com/a/308689/3855010