为什么java.util.Date给我错误的时间?

时间:2012-02-23 10:03:25

标签: java date

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

Thu Feb 23 04:57:57 ACT 2012

我在main方法中运行它。我的系统当前时间是PKT。但它给了我ACT的时间。

有什么想法吗?如何获得正确的系统时间?

enter image description here

3 个答案:

答案 0 :(得分:7)

问题似乎与时区有关,而不是Date值本身。因此,不要打印出当前日期,而是使用类似的东西打印出当前时区:

import java.util.TimeZone ;

public class Test {
    public static void main(String[] args) throws Exception {
        TimeZone zone = TimeZone.getDefault();
        System.out.println(zone.getDisplayName());
        System.out.println(zone.getID());
    }
}

例如,对我来说,打印:

Greenwich Mean Time
Europe/London

一旦您了解了Java认为您的默认时区的详细信息,您就可以开始寻找为什么。有什么关于你如何运行Java的非标准的?任何看起来像是不正确的时区的环境变量?

您可能还需要打印出以下系统属性,这些属性在确定时区时使用:

user.timezone
user.country
java.home

(在获取默认时区之前将其打印出来 - user.timezone被设置为获取它的一部分,如果之前未设置的话。{/ p>

答案 1 :(得分:3)

你可能已经在你的代码或链接库中“强迫”你的TimeZone

static {
      TimeZone.setDefault(anotherTimeZone);
}

这将触发这种行为,即使在主要行为中也是如此。

答案 2 :(得分:1)

java.util.Date给出系统日期。将您的系统时间UTC更改为GMT。