为什么时间变长了会做奇怪的事情?JAVA

为什么时间变长了会做奇怪的事情?JAVA,java,time,long-integer,Java,Time,Long Integer,我想将我的时间值转换为秒,以便进行加法和减法运算。我认为您正在英国运行此代码。或者至少,在默认时区为Europe/London的JVM上。或者至少是在Unix时代比UTC早1小时的时区 原因是在Unix epoch时,伦敦处于永久夏令时,因此伦敦的epoch实际时间为1970/1/1 01:00:00 因此,该时区中的1970/1/1 00:00:00是纪元之前的60分钟(或3600000毫秒) 。这将打印零。“我想将时间值转换为秒,以便进行加法和减法运算。”不要。使用API。停止使用时间。它

我想将我的时间值转换为秒,以便进行加法和减法运算。

我认为您正在英国运行此代码。或者至少,在默认时区为
Europe/London
的JVM上。或者至少是在Unix时代比UTC早1小时的时区

原因是在Unix epoch时,伦敦处于永久夏令时,因此伦敦的epoch实际时间为1970/1/1 01:00:00

因此,该时区中的1970/1/1 00:00:00是纪元之前的60分钟(或3600000毫秒)


。这将打印零。

“我想将时间值转换为秒,以便进行加法和减法运算。”不要。使用API。停止使用时间。它是用于SQL的,有一个坏的设计,并且总是使用默认时区。使用java.time.LocalTime。使用它的API,而不是转换成秒。但是关于你的具体问题:你是在伦敦吗?或者,至少,使用
Europe/London
作为您的时区?大多数日期/时间API都有一个锚定点的概念,即计算所有其他操作的时间点。这使得这些对象只是从锚点到它们所代表的点的时间量的容器(在Java的情况下,是Unix时代以来的毫秒数)。我的问题是通过使用LocalTime解决的。您已经解决了根本原因,因此答案被接受。
Time t = Time.valueOf("00:00:00");
long l = t.getTime(); // why is l -3600000
    TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
    Time t = Time.valueOf("00:00:00");
    long l = t.getTime(); // why is l -3600000
    System.out.println(l);