以下测试失败:
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取代所有东西。那里有一堂课。
答案 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在您的位置