我们有一个日期时间(假设是`LocalDateTime`或`LocalTime`),我们想知道从午夜到这个日期时间已经过去了多少毫秒。假设给定的日期时间是现在:
LocalDateTime now = LocalDateTime.now();
午夜是相对于现在的,在过去的00:00:00,所以我们可以这样创建它:
LocalDateTime midnight = LocalDateTime.of(now.getYear(),
now.getMonth(), now.getDayOfMonth(), 0, 0, 0);
最后,计算午夜和现在之间的时间差,单位是毫秒。这可以通过几种方式完成,但最简洁的解决方案可能依赖于`java.time.temporal.ChronoUnit`。这个API公开了一组有用的单位,用于操作日期、时间或日期时间,包括毫秒:
System.out.println("Millis: "
+ ChronoUnit.MILLIS.between(midnight, now));
74. 将日期时间范围分割成相等的间隔
假设给定一个日期时间范围(由两个`LocalDateTime`实例表示的开始日期和结束日期界定)和一个整数n。为了将给定范围分割成n个相等的间隔,我们首先定义一个`java.time.Duration`,如下所示:
Duration range = Duration.between(start, end);
有了这个日期时间范围,我们可以依赖于`dividedBy()`来获得一个除以指定n的它的副本:
Duration interval = range.dividedBy(n - 1);
最后,我们可以从开始日期(范围的左头)开始,并反复地用间隔值增加它,直到我们到达结束日期(范围的右头)。在每一步之后,我们将新的日期存储在一个列表中,最终将返回这个列表。以下是完整的代码:
public static List<LocalDateTime> splitInEqualIntervals(
LocalDateTime start, LocalDateTime end, int n) {
Duration range = Duration.between(start, end);
Duration interval = range.dividedBy(n - 1);
List<LocalDateTime> listOfDates = new ArrayList<>();
LocalDateTime timeline = start;
for (int i = 0; i < n - 1; i++) {
listOfDates.add(timeline);
timeline = timeline.plus(interval);
}
listOfDates.add(end);
return listOfDates;
}
结果的`listOfDates`将包含n个等间隔的日期。
本文暂时没有评论,来添加一个吧(●'◡'●)