有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

以下测试失败:

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”

有人能指出我在哪里犯傻吗

我花了更长的时间来研究这件事,而不是用乔达的时间来取代一切。那里有个教训


共 (2) 个答案

  1. # 1 楼答案

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

    因此,该值将为1970年1月1日星期四05:30:00

    “05:30:00”取决于您所在的位置

  2. # 2 楼答案

    问题是,Java在1970年的欧洲/伦敦时区缩写名称周围有一个bug

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

    (顺便说一句,即使现在也值得转换成Joda Time。避免像瘟疫这样的内置库:)

    Joda Time将时区缩写打印为“BST”。这似乎同样奇怪,因为它显然不是夏天。。。但有可能“s”在这里代表标准,就像“英国标准时间实验”期间那样。详见Wikipedia

    (请注意,UTC本身在Unix时代甚至都不存在——它是在1972年引入的。为了这个答案,我假设一个预期的UTC:)