关于java:使用服务器时区的JSP显示服务器日期和时间

JSP Display Server Date and Time Using Server Timezone

本问题已经有最佳答案,请猛点这里访问。

我在墨西哥有一台运行我的应用程序的RHEL6 Linux服务器。 服务器时区是CDT。 因此,当我在Linux命令行上发出"date"命令时,我得到了正确的日期和时间,这是我的一小时。 (我在美国东部时间)。

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

比如我使用:

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

这会显示,比方说,

Tue Aug 22 14:39:13 EDT 2017

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

Tue Aug 22 13:39:13 CDT 2017

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

我对Java,JSP有些新意。 所以我不确定如何以我需要的方式获得输出。

谢谢


你的问题与许多其他问题重复,所以简单地说......

不要使用麻烦的旧的date.time类,现在由java.time类取代。

Date始终为UTC,但其toString方法动态应用JVM的当前默认时区。混乱。避免遗留类的众多原因之一。

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

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

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

对于其他格式,请参阅DateTimeFormatter。注意ofLocalized…方法。

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