我有两个Timestamp对象,一个用于当前时间,一个用于过去一段时间。如何计算两个时间戳之间经过的小时数?
java.sql.Timestamp currentTS = Timestamp(Calendar.getInstance().get(Calendar.MILLISECOND));
java.sql.Timestamp lastProcessedTS = Timestmp.valueOf(<some value in past>);
答案 0 :(得分:1)
long elapsedTimeMillis = lastProcessedTS.getTime() - currentTS.getTime();
long hours = (elapsedTimeMillis / (1000 * 60 * 60)) % 24;
答案 1 :(得分:0)
不要在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。