Java SimpleDateFormat:错误一小时

Men*_*nno 15 java date date-format

我不需要整个故事来澄清我的问题,所以我只是展示代码(这只是一个例子).为什么我的结果有所不同?

long millis = 2305293L;
System.out.println(
    millis + "ms = " + 
    (millis / 1000) + "s = " + 
    (millis / 1000 / 60) + "m");
System.out.println(
    new SimpleDateFormat("HH:mm:ss").
    format(
        new Date(millis)
        )
    );
Run Code Online (Sandbox Code Playgroud)

产量

2305293ms = 2305s = 38m
01:38:25
Run Code Online (Sandbox Code Playgroud)

Pet*_*rey 39

如果您在伦敦或巴黎,时区是1970年1月1日GMT + 1.

出于@ARC在评论中解释的原因,英国从1968年2月18日到1971年10月31日使用GMT + 1或UTC + 1

我可以在没有任何时区干扰的情况下进行长时间的转换吗?

将TimeZone设置为GMT.

long millis = 2305293L;
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(sdf.format(new Date(millis)));
Run Code Online (Sandbox Code Playgroud)

版画

00:38:25.293
Run Code Online (Sandbox Code Playgroud)

  • 显然这是一个名为英国标准时间的实验.维基百科:对实验头两年的事故数据进行分析表明,虽然早上伤亡人数有所增加,但当晚伤亡人数大幅减少,总人数减少约2,700人在实验的前两个冬天,当时每天约有1000人在道路上遇难或受重伤,严重受伤. (6认同)
  • 我知道的东西是如此随机,它甚至对Trivial Pursuit都没用;) (2认同)