【问题标题】:Grails/Java new Date() different in GSPGSP 中的 Grails/Java new Date() 不同
【发布时间】:2014-07-22 21:18:23
【问题描述】:

我遇到了一些非常奇怪的事情。如果我在控制器中 println new Date() 输出是 UTC 格式(这是我想要的)。但是当我从 grails gsp 打印 new Date() 时,日期是 EDT 格式并且是关闭的。

我在 CentOS Linux 6.5 到 Tomcat 7 上运行我的应用程序。系统日期和硬件日期使用 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,但唯一不是这样的情况是我从视图中打印 new Date()。

有什么想法吗?

编辑:

我不相信 formatDate 对我有用,因为我实际上不只是为用户显示日期。我正在将新的 Date() 对象与另一个日期进行比较。我只是将日期打印到响应中,因为我想看看为什么比较日期不起作用。这是我在新 Date() 对象中使用的代码 sn-p:

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

【问题讨论】:

标签: java grails timezone


【解决方案1】:

您不应在 GSP 中使用 ${new Date()} 之类的东西来为响应呈现日期。您应该使用&lt;g:formatDate&gt; 标记,当您这样做时,您可以指定一个格式字符串,该字符串专门表示您希望如何格式化日期。有关示例和更多详细信息,请参阅 http://grails.org/doc/latest/ref/Tags/formatDate.html

【讨论】:

  • 您所做的编辑将其变成了一个完全不同的问题。第一个问题是关于日期格式,第二个问题是关于日期的实际值。
【解决方案2】:

时区仅影响日期在格式化为字符串时的显示方式。

Date 对象存储自 1970 年 1 月 1 日 UTC 以来的毫秒值。 比较日期时会使用该值。

你可以通过调用Date.getTime()来测试这个

查看这个答案以获得更详细的解释:https://stackoverflow.com/a/308689/3855010

【讨论】:

    猜你喜欢
    • 2020-09-24
    • 2014-09-21
    • 2011-10-22
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    相关资源
    最近更新 更多