专业的JAVA编程教程与资源

网站首页 > java教程 正文

Java修炼终极指南:73 - 74(星际之修炼指南 爱吃肉包的妞)

temp10 2024-09-07 20:14:32 java教程 18 ℃ 0 评论


我们有一个日期时间(假设是`LocalDateTime`或`LocalTime`),我们想知道从午夜到这个日期时间已经过去了多少毫秒。假设给定的日期时间是现在:

Java修炼终极指南:73 - 74(星际之修炼指南 爱吃肉包的妞)

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个等间隔的日期。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表