如何获得给定Instant的开始和结束时间。 例如:如果我的Instant是2016-05-18T09:25:17.554Z那么我需要字符串 2016-05-18T09:00:00.000Z-2016-05-18T10:00:00.000Z
即我需要时间窗口,我的瞬间就在这里。
答案 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