Как вернуть список объектов времени, просматривая часы - PullRequest
2 голосов
/ 09 ноября 2019

Я пытался выяснить алгоритм, возвращающий список времени, основанный на времени начала и времени окончания и сколько циклов. Например, время начала в 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;

}

Примечание: long totalHours возвращает странное число, а не 16 иЯ не уверен, как зацикливать время и возвращать нужные значения.

1 Ответ

3 голосов
/ 09 ноября 2019

java.time

Это одно из мест, где java.time, современный Java-интерфейс даты и времени, превосходит другие. Метод 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 суперкласса java.util.Date, другого плохо разработанного и давно устаревшего класса, который мы больше не должны использовать. Это getTime возвращает число миллисекунд со времени 1970-01-01T00: 00: 00 UTC, что не имеет смысла для времени суток. Я считаю вероятным, что ваше вычитание дало количество миллисекунд, а не количество часов между вашими двумя разами.

Редактировать: Если вам интересно, и хотите проверить: 16 часов равняется 57 600 000 миллисекунд. Я получил число от TimeUnit.HOURS.toMillis(16).

Ссылка

Учебное пособие по Oracle: Дата и время , объясняющее, как использовать java.time.

...