【发布时间】:2019-10-28 11:24:02
【问题描述】:
我有一台 UTC 时区的 linux 机器。
[user@test packages]$ date +'%:z %Z'
+00:00 UTC
运行cat /etc/localtime 似乎也表明我的机器处于UTC 时区;
[user@test ~]$ cat /etc/localtime
f2UTCTZif2UTC
UTC0
但是,在 Java 1.7 下运行 tomcat 的应用程序中调用 logger.info(new Date()) 会返回类似于 Mon Oct 28 01:51:39 HDT 2019
这很奇怪,所以我创建了一个简单的Java程序进行测试:
import java.util.Date;
class Test
{
public static void main (String args[])
{
Date dt = new Date();
System.out.println(dt);
}
}
编译运行
[user@test]$ /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.211.x86_64/bin/javac Test.java
[user@test]$ /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.211.x86_64/bin/java Test
Mon Oct 28 02:08:49 HDT 2019
我的问题是为什么我的 Linux 实用程序以 UTC 格式返回日期,而我的 Java 应用程序却以 HDT 格式返回日期(我什至不知道 HDT 是什么)。
由于我维护的应用是旧版应用,因此我无法使用 Joda Time 或升级到 Java8 或更高版本,因为这意味着要进行大量代码更改。
【问题讨论】:
-
/etc/timezone说什么?见Check TimeZone on Linux host -
HDT 代表 夏威夷夏令时间....机器是否位于(或按原样设置)在夏威夷?
-
@Sterconium 机器在公司数据中心,机器必须是UTC
-
好的,但这不能回答我的问题:这台机器(或按原样设置)在夏威夷吗?
-
老式的
Date没有时区。但它打印为HDT表明JVM 的时区设置可能是夏威夷-阿留申时间。您可以通过打印ZoneId.systemDefault()和System.getProperty("user.timezone")来查看。
标签: java linux date timezone java-7