在制作时间戳时(1小时= 60*60*1000毫秒),只需减去当前时间的一小时(以毫秒为单位)
Timestamp oneHourAgo = new Timestamp(System.currentTimeMillis() - (60 * 60 * 1000));
Run Code Online (Sandbox Code Playgroud)
mySqlTimestamp.toInstant()
.minus( Duration.ofHours( 1 ) )
Run Code Online (Sandbox Code Playgroud)
java.sql 类型仅用于与数据库交换数据。不要将这些用于业务逻辑。
麻烦的旧日期时间类现在被 java.time 类取代。java.time 的等价物java.sql.Timestamp是java.time.Instant。您甚至可以通过添加到旧类的新方法来转换。
Instant instant = mySqlTimestamp.toInstant();
Run Code Online (Sandbox Code Playgroud)
然后,您可以减去由 a 表示的小时Duration。
Duration d = Duration.ofHours( 1 );
Instant hourPrior = instant.minus( d );
Run Code Online (Sandbox Code Playgroud)
请注意,这些类遵循不可变对象模式。不是修改(“改变”)对象中部分值,而是根据原始值实例化新对象。所以在另一个答案中讨论的副作用没有问题。并自动线程安全。