2012-07-05 115 views
13

如果我创建一个新的Date()对象。它将打印的默认时区是什么?什么是java.util.Date中的默认时区

我有我的机器在GMT运行。我正在创建一个新的Date()对象。如果我打印它为什么显示Thu Jul 05 08:21:05 PKT 2012.如何将时区当作PKT?

+1

可以尝试一下这个链接http://stackoverflow.com/q/2891361/1465828 – Aprian

+0

谢谢。但它不回答我的问题 – user1182253

+0

根据其他语言我知道它应该是UTC,因为至少在Python和Objective-C日期存储此默认时区。 –

回答

18

日期本身没有任何时区。它toString()方法使用当前的默认时区,返回表示此日期的字符串:

Date date = new Date(); 

System.out.println(TimeZone.getDefault()); 
System.out.println(date); 

TimeZone.setDefault(TimeZone.getTimeZone("UTC")); 

System.out.println(TimeZone.getDefault()); 
System.out.println(date); 

执行上面的代码在我的机器导致了以下的输出:通常

sun.util.calendar.ZoneInfo[id="Europe/Paris",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=184,lastRule=java.util.SimpleTimeZone[id=Europe/Paris,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]] 
Fri Jul 06 09:24:45 CEST 2012 
sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null] 
Fri Jul 06 07:24:45 UTC 2012 
+0

在eclipse中,一个java.lang.date显示一个cdate.zoneInfo对象。它可能无法从我的pov访问日期有一个相关的时区。这在转换到不同的时区时起着至关重要的作用。在不知道源时区的情况下,不可能进行转换。你能否谈谈“没有时区问题?” –

+0

@ThomasS“没有时区问题” - >首先,文档说:... Date类旨在反映协调世界时(UTC)... –

3

那么实际上基本日期时间是时区不可知的,他们不存储时区。要使用时区,请使用格式化程序,日历等。当然,基本日期必须位于默认时区,无论它是什么(通常是GMT),否则您将无法从基本日期实例创建本地日期。

在你的特殊情况下,它将有助于查看a)javadocs和b)到类本身,因为JDK通常分布在java.util.Date的源代码中。根据javadoc,java.util.Date类表示自标准基准时间以来的毫秒数,该时间被称为“时代”,即1970年1月1日00:00:00 GMT。

如果它在您的机器上打印时显示不同的日期,这是因为您的系统将使用您系统的时区默认值打印它。但是,您可以使用任何其他时区自行打印。

3

如果你在linux下运行,系统中某处有一些神奇的时区文件。对于我的Gentoo魔术刚刚创建的内容

Europe/Berlin 

有趣的是,date了正确的时间和时区(CEST)所有的时间,但Java送我到Greenwhich一个文本文件/ etc /时区。

> date 
Thu Sep 18 08:49:14 CEST 2014