java - 如何通过比较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);
}
我正在将更新的时间戳列从 DB 转换为毫秒
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
, 都设计得很糟糕并且都已经过时了。避免使用那些。
推荐阅读
- filter - 如何过滤组中的最小不同值?
- ios - AudioKit/DSP:了解磁盘上与内存中未压缩音频大小之间的差异
- excel - Scala不读取Excel文件
- php - 如何使用php将第二个数组值插入第一个数组
- python - 使用没有 with 语句 Python 的 ThreadPoolExecutor
- java - 使用 Okhttp formdata 登录网站
- java - 如何解决这个 java 问题硬件中的低估案例(USACO Silver)
- batch-file - 对于 /F findstr 设置 CSV 的第二列的值
- r - 使用汇总 r 进行逻辑值计数
- c++ - 如何使用箭头在 QtVirtualKeyboard 中导航