获取4小时前的日期

2022-09-01 17:56:56

如何在Java中返回比当前系统时间少4小时的Date对象?


答案 1

如果您已经在使用 Java 8 或更高版本:

LocalDateTime fourHoursAgo = LocalDateTime.now().minusHours(4);

或者,如果要考虑 DST(夏令时)(以防万一它在过去 4 小时内碰巧进入或退出 DST 的某个地方):

ZonedDateTime fourHoursAgo = ZonedDateTime.now().minusHours(4);

或者,如果您还没有使用 Java 8:

Date fourHoursAgo = new Date(System.currentTimeMillis() - (4 * 60 * 60 * 1000));

并且您希望将 DST 考虑在内:

Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, -4);
Date fourHoursAgo = calendar.getTime();

答案 2

其他答案是正确的,但我想贡献现代答案。现代解决方案使用 现代 Java 日期和时间 API。java.time

Instant fourHoursAgo = Instant.now().minus(Duration.ofHours(4));
System.out.println(fourHoursAgo);

这刚刚打印:

2018-01-31T15:22:21.113710Z

最后表示时间以 UTC 格式打印 — 如果您愿意,请以 UTC 偏移量为零。该类是 的现代替代品,因此我建议您坚持使用它。现代API通常更易于使用,更干净,设计得更好。ZInstantDate

请注意让库类为您进行 4 小时减法的优点:代码更易于阅读,并且不易出错。没有有趣的常量,也没有读者花时间检查它们是否正确。

如果您确实需要一个老式对象,例如,在使用无法更改或不想更改的旧版 API 时,请按如下方式进行转换:Date

Date oldfashionedDate = Date.from(fourHoursAgo);

链接:Oracle 教程跟踪:日期时间。当然,互联网上还有其他资源,请搜索。