首页 > 解决方案 > Java LocalDateTime 在不同的服务器上给出不同的输出。相同时区配置

问题描述

我有一个简单的程序,它只输出时间,但我在不同的 Linux 发行版上得到不同的结果。我验证了默认时区已设置属性,并且在 SuSe 上我得到了我的默认时区,但在 Ubuntu 上我得到了 UTC 时间。我不知道为什么。

这是代码

import java.time.LocalDateTime;

public class Main {
    public static void main(String[] args) {
        LocalDateTime nowTime = LocalDateTime.now();
        System.out.print(nowTime);
    }
}

在我的 Suse (& Windows) 服务器上,这是我的输出

/home/user/test # timedatectl
      Local time: Sat 2020-04-11 12:18:49 PDT
  Universal time: Sat 2020-04-11 19:18:49 UTC
        RTC time: Sat 2020-04-11 19:18:49
       Time zone: America/Los_Angeles (PDT, -0700)
 Network time on: yes
NTP synchronized: yes
 RTC in local TZ: no
/home/user/test # java Main
2020-04-11T12:18:51.461

然后在我的 Ubuntu 发行版上

/home/user/test# timedatectl
                      Local time: Sat 2020-04-11 12:19:53 PDT
                  Universal time: Sat 2020-04-11 19:19:53 UTC
                        RTC time: Sat 2020-04-11 19:19:53
                       Time zone: America/Los_Angeles (PDT, -0700)
       System clock synchronized: yes
systemd-timesyncd.service active: yes
                 RTC in local TZ: no
/home/user/test# java Main
2020-04-11T19:19:57.232828

无论我在什么操作系统上部署此代码,我都必须做些什么来确保输出是一致的?

编辑:在添加另一行代码以检查 Java 正在使用的时区后,这就是我得到的

System.out.println(java.util.TimeZone.getDefault().getDisplayName());

Suse => 太平洋标准时间

Ubuntu => 协调世界时

所以现在我需要弄清楚为什么它使用不同的时区

标签: javalinuxdatetime

解决方案


Ubuntu 服务器上的时区设置一定有问题。我重新运行了时区配置工具,现在一切正常

dpkg-reconfigure tzdata


推荐阅读