DateFormat将新的日期(0)打印为纪元+ 1小时

时间:2011-09-13 18:32:21

标签: java date simpledateformat

以下测试失败:

DateFormat df = new SimpleDateFormat("HH:mm:ss z");
assertEquals("00:00:00 GMT", df.format(new Date(0)));

预计“00:00:00 GMT”但是“01:00:00 GMT”

有人能说出我傻到的地方吗?

我花了更长的时间来看这个,而不是用Joda-Time取代所有东西。那里有一堂课。

2 个答案:

答案 0 :(得分:11)

问题是Java在1970年的欧洲/伦敦时区缩写名称中存在错误。

在1970年的冬天,英国仍然在UTC + 1 - 但Java认为它仍然被称为“GMT”。所以你所看到的是1970年1月1日午夜UTC的本地时间...这只是我们习惯了GMT = UTC,这就是为什么它让人困惑。

(作为旁注,即使现在仍然值得转换为Joda Time。避免像瘟疫这样的内置库:)

Joda Time将时区缩写打印为“BST”。这似乎同样奇怪,因为它显然不是夏令时......但是标准的“S”可能是标准的,因为那是在“英国标准时间实验”期间。有关详细信息,请参阅Wikipedia

(请注意,UTC本身甚至不存在于Unix时代 - 它是在1972年推出的。为了这个答案,我假设一个proleptic UTC:)

答案 1 :(得分:0)

new Date(0)返回分配一个Date对象并对其进行初始化,以表示自标准基准时间(称为“epoch”)以来的指定毫秒数,即1970年1月1日00:00:00 GMT。

所以价值将是Thu Jan 01 05:30:00 IST 1970

“05:30:00”Depens在您的位置