Java SimpleDateFormat:一小时错误

2022-09-04 05:30:17

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

法典

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)
        )
    );

输出

2305293ms = 2305s = 38m
01:38:25

答案 1

如果你在伦敦或巴黎,1970年1月1日的时区是GMT+1。

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

我是否可以在没有任何时区干扰的情况下转换多头?

将时区设置为 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)));

指纹

00:38:25.293

答案 2

试试这个 :

System.out.println(new java.util.Date (0));

你会看到它从01:00:00开始,因此相差一个小时。