Java SimpleDateFormat:错误一小时

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

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 

如果你在伦敦或巴黎,时区是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))); 

版画

 00:38:25.293 

尝试这个 :

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

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