【问题标题】:Calculate elapsed hours between two Java Timestamp objects计算两个 Java Timestamp 对象之间经过的小时数
【发布时间】:2016-09-26 07:16:24
【问题描述】:

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

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

【问题讨论】:

标签: java sql date time calendar


【解决方案1】:
long elapsedTimeMillis = lastProcessedTS.getTime() - currentTS.getTime();
long hours = (elapsedTimeMillis / (1000 * 60 * 60)) % 24;

【讨论】:

    【解决方案2】:

    java.time

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

    Java 8 中内置的 java.time 框架取代了这些旧类。

    大部分 java.time 功能已向后移植到 Java 6 和 7,并进一步适用于 Android。

    Instant

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

    如果使用JDBC 4.2 驱动程序,您可以调用getObjectTIMESTAMP 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-17
      • 2017-03-26
      • 2013-12-06
      • 1970-01-01
      • 2015-11-15
      • 2011-10-10
      • 1970-01-01
      相关资源
      最近更新 更多