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

System.out.println(new Date()); Thu Feb 23 04:57:57 ACT 2012 

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

任何想法? 如何获得正确的系统时间?

在此处输入图像描述

问题似乎与时区有关,而不是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设置为获取它的一部分。)

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

 static { TimeZone.setDefault(anotherTimeZone); } 

即使在主要行为中,这也会触发这种行为。

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