java - Java 中的时区不匹配

标签 java

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

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

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

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

它返回我东部夏令时间的时间。我缺少什么配置。

最佳答案

在解释控制台显示的日期对象时必须小心,因为它们是使用运行该程序的虚拟机的默认时区进行格式化的(默认情况下从操作系统的时区继承它)。 当然,您可以提供自己的时区,如 Jesper 的答案中所解释的那样。但在这样做时,我强烈建议使用 IANA 时区标识符,例如 America/New_York,而不是 EST。更重要的是,因为具有“标准”的缩写不考虑夏令时。

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

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

-Duser.timezone="America/New_York" 

关于java - Java 中的时区不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19603689/

相关文章:

java - 如何在运行时编译代码

Java泛型和反射: class loading

java - 添加和删​​除水平列表项 onScroll

java - JDBC:在 MySQL 上运行 `insert` 查询时出现 OutOfMemoryError

java - 如何使用增强的 for 循环来迭代另一个方法中的 HashSet?

java - 更改 fragment 时应用程序崩溃

java - 为什么会收到此LineUnavailableException?

java - FragmentStatePagerAdapter 与 Glide 一起使用会导致 NullPointerException

java - 如何设计一个具有许多独立流程的企业应用程序?

java - 为什么 Integer.MAX_VALUE + 1 == Integer.MIN_VALUE?