Java SQL从日期减去一小时

dje*_*lin 4 java sql timestamp date

我需要java.sql.Timestamp一个小时前相应的值.我在这里发生了一些与日期有关的事情,因此重要的是当前时间只采样一次,其余代码使用同一时间.至于Timestamp基于ms的当前时间设置.

操纵Calendar对象似乎非常笨拙,因为我必须做一些事情,比如添加和减去日历的时间,这会修改它,所以我会很高兴自己先克隆自己的副本或者翻转它的价值.

Ale*_*man 6

在制作时间戳时(1小时= 60*60*1000毫秒),只需减去当前时间的一小时(以毫秒为单位)

Timestamp oneHourAgo = new Timestamp(System.currentTimeMillis() - (60 * 60 * 1000));
Run Code Online (Sandbox Code Playgroud)


Bas*_*que 5

tl;博士

mySqlTimestamp.toInstant()
              .minus( Duration.ofHours( 1 ) )
Run Code Online (Sandbox Code Playgroud)

避免旧的日期时间课程

java.sql 类型仅用于与数据库交换数据。不要将这些用于业务逻辑。

麻烦的旧日期时间类现在被 java.time 类取代。java.time 的等价物java.sql.Timestampjava.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)

请注意,这些类遵循不可变对象模式。不是修改(“改变”)对象中部分值,而是根据原始值实例化新对象。所以在另一个答案中讨论的副作用没有问题。并自动线程安全