Grails / Java新的Date()在GSP中有所不同

时间:2014-07-22 21:18:24

标签: java grails timezone

我遇到了一些非常奇怪的事情。如果我在控制器中打印新的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>

2 个答案:

答案 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