如何通过比较 java 中的两个时间戳来查找经过的时间(以毫秒为单位)

How to find elapsed time in milliseconds by compare two timestamps in java

我需要通过比较时间戳中的当前时间与在 java

中创建的时间戳来找到经过的时间(以毫秒为单位)

例如

Updated Timestamp from DB column : 26/07/20 12:00:19.330000000 PM
Current Timestamp : 26/07/20 11:55:19.330000000 AM

超时配置为 2 分钟

要获取当前时间戳,

  public static Timestamp getTimestampinGMT(Date date) {
      DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
      df.setTimeZone(TimeZone.getTimeZone("GMT"));
      String strCurrentTimeInGMT = df.format(date);
      return Timestamp.valueOf(strCurrentTimeInGMT);
  }

我正在将更新的时间戳列从数据库转换为毫秒

Timestamp.valueOf(createtime).getTime()

配置的超时 2 分钟转换为毫秒,

TimeUnit.MINUTES.toMillis(2);

有什么比较时间戳和计算经过时间的最佳方法吗?

从数据库中获取更新的时间戳作为日期时间对象。添加两分钟以获得超时时间。与当前时间比较。

    ResultSet rs = yourPreparedStatement.executeQuery();
    if (rs.next()) {
        OffsetDateTime odt = rs.getObject("your_db_column", OffsetDateTime.class);
        OffsetDateTime currentTime = OffsetDateTime.now(odt.getOffset());
        OffsetDateTime timeoutOdt = odt.plus(TIMEOUT);
        if (currentTime.isAfter(timeoutOdt)) {
            System.out.println("Timed out");
        }
        else {
            System.out.println("Not timed out yet");
        }
    }

我假设了一个 TIMEOUT 类型的常量 Duration。这是灵活的,因为它允许您以分钟或毫秒或您喜欢的单位定义超时。例如:

private static final String CONFIGUTRED_TIMEOUT = "PT2M"; // get from configuration
private static final Duration TIMEOUT = Duration.parse(CONFIGUTRED_TIMEOUT);

PT2M 配置的超时可能看起来很有趣。阅读时间为 2 分钟。格式为 ISO 8601。您也可以使用 Duration.ofMinutes(2)Duration.ofMillis(120_000).

如果您的 Oracle 数据库中的数据类型是 timestamp with time zone,这是推荐的,您应该能够将其检索为 OffsetDateTime,如图所示。您也可以尝试 ZonedDateTimeInstant。如果数据库中的列没有任何时区,检索为 LocalDateTime 并使用其 atZone 方法转换为正确的时区。

您尝试使用的日期和时间 类,DateDateFormatSimpleDateFormatTimeZoneTimestamp,是所有设计不佳且早已过时。避免使用那些。