即时时间范围

时间:2016-05-18 09:26:58

标签: java

如何获得给定Instant的开始和结束时间。 例如:如果我的Instant是2016-05-18T09:25:17.554Z那么我需要字符串 2016-05-18T09:00:00.000Z-2016-05-18T10:00:00.000Z

即我需要时间窗口,我的瞬间就在这里。

3 个答案:

答案 0 :(得分:1)

使用Apache commons-lang,您可以使用DateUtils获取最高和最低日期:

Date date = Date.from(instant);;
Date high = DateUtils.ceiling(date, Calendar.HOUR);//to get higher
Date low = DateUtils.truncate(date, Calendar.HOUR); //to get lower

答案 1 :(得分:1)

对于Java 8时间API,可以这样做:

final Instant instant = Instant.parse("2016-05-18T09:25:17.554Z");
final Instant startInstant = instant.truncatedTo(ChronoUnit.HOURS);
final Instant endInstant = startInstant.plus(1, ChronoUnit.HOURS);
System.out.println(instant + ", " + startInstant + ", " + endInstant);

这会打印2016-05-18T09:25:17.554Z, 2016-05-18T09:00:00Z, 2016-05-18T10:00:00Z

答案 2 :(得分:1)

尝试使用幻数86400000

Instant instant = Instant.now();
Instant instantStart = Instant.ofEpochMilli((instant.toEpochMilli() / 86400000) * 86400000);
Instant instantEnd = Instant.ofEpochMilli((instant.toEpochMilli() / 86400000) * 86400000 + 86400000);
System.out.println(instant);
System.out.println(instantStart);
System.out.println(instantEnd);

输出

2016-05-18T09:47:03.782Z
2016-05-18T00:00:00Z
2016-05-19T00:00:00Z