2013-02-05 42 views
1

运行下面的代码:解析日期返回错误的时间

String s = "1914-07-20T00:00:00+0200"; 
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); 
System.out.println(df.parse(s)); 

我得到这样的结果:

孙七月 23时34分52秒EET 1914年 (注意日期和小时)

+0

它打印'Mon Jul 20 03:53:20 IST 1914'(印度)。 –

+0

'Locale.getDefault()'返回什么? – sp00m

+0

@ sp00m en_US.I不认为语言环境是问题,我尝试了各种不同的格式,并且它们都返回正确的日期,问题似乎与此有关格式 – tibtof

回答

4

这可能是其中一个时间调整,发生在中午让太阳升起。这些发生在当时世界变得更小,当地时区被更普遍的时区所取代。 25分钟可能是这样的调整。从那时起到现在,您将不得不查看东欧时区调整的记录。

检查这个的另一种方法是把它放在一个循环中,看它在1924年和1934年等工作,直到现在。在某种程度上,如果进行了这样的调整,它可能会开始工作,并且可以将其缩小到某个特定的时间,在该特定的时间下,所有时间都按照预期工作,并且之前的所有时间都不会。虽然,可以肯定的是,可能会有一系列的调整。 10分钟,7分钟加起来25分钟。

此页面(http://www.prokerala.com/travel/timezones/EET?mode=history)显示GMT为1.64444于1920年。那是39:52分,秒偏移于1901年和2。

这个页面(http://home.tiscali.nl/~t876506/TZworld.html)是关于全球tz数据库,显示欧洲/雅典1:34:52的LMT(当地平均时间),理论上应该是+2:00。我不太清楚这与它有什么关系,但是看到OP的确是一个奇怪的巧合。 (我还发现,约达时间在“官方”时区数据文件第一次输入之前的任何日期都使用LMT偏移量。

+0

我认为这是正确的。在2012年该年减去7小时,1914年减去8小时 –