如何通过遍历小时返回时间对象列表

我一直在尝试找出一种算法,该算法根据开始时间和结束时间以及循环次数来返回时间列表。例如,开始时间是早上6点,结束时间是晚上10点,循环数是5,所以我需要返回22-6 = 16和16/5 = 3.2,所以我需要返回

6:00:00
9:20:00
12:40:00
15:60:00
18:20:00
21:40:00

我需要返回这些值。 (请注意,我编写的返回值并不准确,仅用于演示目的)

当前代码:

// List<Time> times(int looping){
long test(){
    List<Time> result = new ArrayList<Time>();
    String start = "06:00:00";
    String finish = "22:00:00";

    Time startTime = Time.valueOf(start);
    Time endTime = Time.valueOf(finish);

    long totalHours = endTime.getTime() - startTime.getTime();

    return totalHours;
   // return result;

}

注意:较长的totalHours返回一个非16的奇数,我不确定如何循环抛出时间并返回所需的值。

yg1438 回答:如何通过遍历小时返回时间对象列表

java.time

这是现代Java日期和时间API java.time擅长的地方之一。方法Duration::dividedBy确实需要您将时间跨度划分为一定数量的块。

    List<LocalTime> result = new ArrayList<>();
    String start = "06:00:00";
    String finish = "22:00:00";

    LocalTime startTime = LocalTime.parse(start);
    LocalTime endTime = LocalTime.parse(finish);

    Duration totalTime = Duration.between(startTime,endTime);
    int subintervalCount = 5;
    Duration subintervalLength = totalTime.dividedBy(subintervalCount);

    LocalTime currentTime = startTime;
    for (int i = 0; i < subintervalCount; i++) {
        result.add(currentTime);
        currentTime = currentTime.plus(subintervalLength);
    }

    System.out.println(result);

这将输出:

  

[06:00,09:12,12:24,15:36,18:48]

奇怪的总数是从哪里来的?

  

long totalHours返回一个不为16的奇数,我不确定   如何循环抛出时间并返回所需的值。

Time类未定义getTime方法。相反,您正在调用超类getTime的{​​{1}}方法,这是另一个我们设计不宜使用且已过时的类,我们不再使用。此java.util.Date调整自1970-01-01T00:00:00 UTC以来的毫秒的计数,这对于一天中的某个时间来说是没有意义的。我认为您的减法产生的是毫秒数,而不是两次之间的小时数。

编辑:如果您好奇并想检查:16小时等于57,600,000毫秒。我从getTime获得了电话号码。

链接

Oracle tutorial: Date Time解释了如何使用java.time。

本文链接:https://www.f2er.com/3133095.html

大家都在问