如何通过比较 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
,如图所示。您也可以尝试 ZonedDateTime
或 Instant
。如果数据库中的列没有任何时区,检索为 LocalDateTime
并使用其 atZone
方法转换为正确的时区。
您尝试使用的日期和时间 类,Date
、DateFormat
、SimpleDateFormat
、TimeZone
和 Timestamp
,是所有设计不佳且早已过时。避免使用那些。
我需要通过比较时间戳中的当前时间与在 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
,如图所示。您也可以尝试 ZonedDateTime
或 Instant
。如果数据库中的列没有任何时区,检索为 LocalDateTime
并使用其 atZone
方法转换为正确的时区。
您尝试使用的日期和时间 类,Date
、DateFormat
、SimpleDateFormat
、TimeZone
和 Timestamp
,是所有设计不佳且早已过时。避免使用那些。