计算两个Java时间戳对象

时间:2016-05-27 20:55:21

标签: java sql date time calendar

我有两个Timestamp对象,一个用于当前时间,一个用于过去一段时间。如何计算两个时间戳之间经过的小时数?

java.sql.Timestamp currentTS = Timestamp(Calendar.getInstance().get(Calendar.MILLISECOND));
java.sql.Timestamp lastProcessedTS = Timestmp.valueOf(<some value in past>);

2 个答案:

答案 0 :(得分:1)

long elapsedTimeMillis = lastProcessedTS.getTime() - currentTS.getTime();
long hours = (elapsedTimeMillis / (1000 * 60 * 60)) % 24;

答案 1 :(得分:0)

java.time

不要在java.sql.Timestamp个对象上执行业务逻辑。该类是与最早版本的Java捆绑在一起的遗留日期时间类的一部分,这些类已被证明设计糟糕,令人困惑且麻烦。尽可能避免使用这些类。

Java 8及更高版本中内置的java.time框架取代了这些旧类。

许多java.time功能已经被反向移植到Java 6&amp; 7并进一步适用于Android。

Instant

java.time.Instant对象代表UTC中时间轴上的一个时刻,分辨率为纳秒。

如果使用JDBC 4.2驱动程序,您可以调用getObject直接将TIMESTAMP WITH TIME ZONE type的SQL列检索到Instant对象中。

如果无法直接获得Instant,请获取java.sql.Timestamp并立即转换为java.time。添加到旧类中的新方法有助于转换。

Instant instant = mySqlTimestamp.toInstant();

Duration

使用一对Instant个对象,将它们之间经过的时间间隔定义为Duration

Duration duration = Duration.between( start , stop );

询问整个时间段内的总小时数。

long totalHours = duration.toHours();

有关详细讨论,请参阅this similar Question