【问题标题】:JSP Display Server Date and Time Using Server Timezone [duplicate]JSP使用服务器时区显示服务器日期和时间[重复]
【发布时间】:2018-01-31 03:43:40
【问题描述】:

我在墨西哥有一台运行我的应用程序的 RHEL6 Linux 服务器。服务器时区是 CDT。因此,当我在 Linux 命令行上发出“日期”命令时,我得到了正确的日期和时间,比我晚了一个小时。 (我在 EDT)。

但是,当我使用 java.util.date 对象并在 JSP 中显示当前服务器日期时,它会显示适合我的时区的日期和时间。

例如我使用:

<% ...
Date local = new Date();
out.write("'" + local + "'");
... %>

这会显示,比如说,

2017 年 8 月 22 日星期二 14:39:13 EDT

,我写这篇文章的日期和时间。但我需要显示

2017 年 8 月 22 日星期二 13:39:13 CDT

这是服务器的实际日期和时间。

我对 Java、JSP 有点陌生。所以我不确定如何以我需要的方式获得输出。

谢谢

【问题讨论】:

  • @BerkleyLamb 在问我的问题之前,我查看了您引用的 SO 问题/答案。据我所见,它没有解决我确保日期/时间正确显示在 JSP 中的特定需求。而且我目前没有使用 javascript 来不断地轮询服务器的日期时间。不过,谢谢您的意见
  • @NimrodArgov,我需要更深入地查看您建议的 SO 帖子。它实际上可能会导致一些见解。谢谢

标签: java jsp


【解决方案1】:

您的问题与许多其他问题重复,所以简而言之......

不要使用麻烦的遗留 date.time 类,现在已被 java.time 类取代。

Date 始终采用 UTC,但其 toString 方法会动态应用 JVM 的当前默认时区。令人困惑。避免遗留类的许多原因之一。

始终指定您希望/预期的时区。永远不要隐式依赖 JVM 的当前时区。所以作为一个程序员,你永远不应该关心部署的服务器可能设置在哪个区域。该默认值可以在运行时随时更改,因此它是不可靠的。

切勿使用 CDT 或 EDT 等 3-4 个字母的伪时区。它们不是实际的区域,它们没有标准化,甚至不是唯一的! Real time zones 命名为 continent/region

ZonedDateTime.now(
    ZoneId.of( "America/Mexico_City" ) 
).toString()

其他格式见DateTimeFormatter。注意ofLocalized… 方法。

如何获取用户想要的时区?您可以尝试通过 Web 浏览器获取默认偏移量。我记得浏览器只返回一个当前的偏移量,而不是一个完整的时区。但最终确定的唯一方法是明确询问用户。

【讨论】:

  • 感谢您的意见。不幸的是,这是我正在使用的遗留代码,可能无法相应地更新它
  • @PaulStoner (A) 如果您正在捕捉当前时刻并生成一个字符串,那么您将如何与旧代码绑定? (B) 此外,仅供参考,您可以通过添加到旧类的新方法与 java.time 进行转换。因此,您始终可以与旧代码进行交互,同时在新代码中只使用 java.time。旧的日期时间类真的是一团糟,应该避免。
猜你喜欢
  • 2013-03-24
  • 2014-08-27
  • 2013-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多