2

我在美国的 Ubuntu 服务器上运行了一个 Java 应用程序并配置了 CEST 时区。

如果我在终端中运行 Date 命令,它会在 CEST 区域时间返回日期 - 这是完美的。

但是在Java中,如果我运行以下代码

System.out.println (new Date ());

它让我在美国东部时间返回时间。我缺少什么配置。

4

3 回答 3

2

您必须小心从控制台中获得的显示解释日期对象,因为它们是使用运行该程序的 VM 的默认时区格式化的(默认情况下从操作系统的时区继承它)。当然,您可以按照 Jesper 的回答中的说明提供自己的 TimeZone。但在这样做的同时,我强烈建议使用 IANA 时区标识符,例如 America/New_York 而不是 EST。更是如此,因为具有“标准”的缩写不考虑日光节约。

因此,如果您只是在控制台上打印日期对象并且没有得到预期的结果,那么您的服务器时区设置为错误值或您的操作系统设置为错误时区的可能性很高。

要更改 JVM 时区,您可以在启动时使用此参数

-Duser.timezone="America/New_York" 
于 2013-10-26T07:52:08.473 回答
0

您说服务器配置为 CEST 时区,但根据 Java,默认时区是 EDT。Java 从操作系统获取默认时区,因此您的服务器可能未正确设置为 CEST。

如果要在特定时区打印日期,请使用 aDateFormat并在其上设置时区:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
df.setTimeZone(TimeZone.getTimeZone("CET"));
System.out.println(df.format(new Date()));

注意:根据我的 Java (Java 7u45),CEST 不是有效的时区。您指的是“CET”吗?(CEST 是 CET 的夏令时变体,但如果您使用 CET,Java 将在适当的情况下自动显示夏令时时间)。

于 2013-10-26T06:52:05.453 回答
0
于 2018-03-16T01:08:14.957 回答