为什么java.sql.Date.getTime()返回1970-01-02的82_800_000而不是86_400_000?

为什么java.sql.Date.getTime()返回1970-01-02的82_800_000而不是86_400_000?,java,time,epoch,Java,Time,Epoch,一天有86400秒。许多时间对象与1970-01-01的历元有关。API说 围绕毫秒值的精简包装器,允许JDBC将其标识为SQL日期值。毫秒值表示自1970年1月1日00:00:00.000 GMT以来经过的毫秒数 下面的代码返回82800000。为什么?怎么了 java.sql.Date sqlDate = java.sql.Date.valueOf( "1970-01-02" ); long millis = sqlDate.getTime(); System.out.println( "e

一天有86400秒。许多时间对象与1970-01-01的历元有关。API说

围绕毫秒值的精简包装器,允许JDBC将其标识为SQL日期值。毫秒值表示自1970年1月1日00:00:00.000 GMT以来经过的毫秒数

下面的代码返回82800000。为什么?怎么了

java.sql.Date sqlDate = java.sql.Date.valueOf( "1970-01-02" );
long millis = sqlDate.getTime();
System.out.println( "expected=" + 86400000 + " " + sqlDate
            + "\n  result=" + millis );

由于您住在德国,您的时区是
CET
(或
GMT+1

您正在解析与您自己的时区对应的日期,因此您正在解析的值与初始开始之间将相差一小时

也就是说,瞬间是一样的

毫秒值表示发生故障的毫秒数 自1970年1月1日00:00:00.000 GMT起通过

因此,如果您的时区为GMT+1,您将在1970年1月2日获得82800000:


(1970年1月1日+一天-一小时)

你的时区是什么?我猜是GMT-1汉克斯。我不知道日期包括时区;-)