Dev*_*Dev 8 java datetime java-8
我想Instant在 Java 中将一个四舍五入到最接近的小时,但前提是它在最接近的小时的 5 分钟内。
假设时间是:2021-02-08T19:02:49.594
预期结果:2021-02-08T19 :00:00.000
同样,如果时间是:2021-02-08T19:56:49.594
预期结果:2021-02-08T20 :00:00.000
但如果时间是 2021-02-08T19:54:49.594 或 2021-02-08T19:06:49.594 那么什么都不做。
小智 7
另一种选择是使用 Duration 类来获取差异并相应地更改它:
Instant roundToHourIfWithin5Min(Instant instant) {
final Instant now = Instant.now();
final Duration absoluteDifference = Duration.between(now, instant).abs();
// If the difference is less than 5 min then we round off
if (absoluteDifference.compareTo(Duration.ofMinutes(5)) < 0) {
final Instant truncated = now.truncatedTo(ChronoUnit.HOURS);
if (instant.isBefore(now)) {
return truncated.plus(1, ChronoUnit.HOURS);
}
else {
return truncated;
}
}
return instant;
}
Run Code Online (Sandbox Code Playgroud)
您可以简单地检查日期时间的分钟部分,然后根据要求将其截断为小时。
演示:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
class Main {
public static void main(String[] args) {
// Test
String[] arr = { "2021-02-08T19:02:49.594", "2021-02-08T19:56:49.594", "2021-02-08T19:54:49.594",
"2021-02-08T19:06:49.594" };
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSS");
for (String s : arr) {
System.out.println(roundToNearestHour(s).format(dtf));
}
}
static LocalDateTime roundToNearestHour(String str) {
LocalDateTime ldt = LocalDateTime.parse(str);
int minute = ldt.getMinute();
return minute < 5 ? ldt.truncatedTo(ChronoUnit.HOURS)
: (minute >= 55 ? ldt.plusHours(1).truncatedTo(ChronoUnit.HOURS) : ldt);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
2021-02-08T19:00:00.000
2021-02-08T20:00:00.000
2021-02-08T19:54:49.594
2021-02-08T19:06:49.594
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
173 次 |
| 最近记录: |