Lania Fatah Ответов: 1

Как создать временной интервал, который увеличит время на 15 минут в android studio?


всем привет ..
я хочу сделать временной интервал который увеличится на 15 минут я имею в виду что я хочу сделать такой временной интервал как этот :

1:00 - 1:15
1:15 - 1:30
1:30 - 1:45
1:45 - 2:00
2:00 - 2:15
.
.
.
.

Что я уже пробовал:

я пытаюсь сделать этот метод, но он не дает правильного решения, поэтому, пожалуйста, помогите мне:



 private ArrayList<String> getTimeSet(boolean isCurrentDay) {
        ArrayList results = new ArrayList<String>();
        SimpleDateFormat sdf = new SimpleDateFormat("hh:mm a");
        for (int i = 0; i < 9; i++) {
            int n=15;
            Calendar calendar = new GregorianCalendar();
            if(!isCurrentDay)


                calendar.set(Calendar.HOUR_OF_DAY, 9);
            calendar.add(Calendar.HOUR_OF_DAY, -i );

            calendar.set(Calendar.MINUTE, 0);
            calendar.add(Calendar.MINUTE, n);

            calendar.set(Calendar.SECOND, 0);

            String  day1 = sdf.format(calendar.getTime());
            calendar.add(Calendar.HOUR, 0);
            calendar.add(Calendar.MINUTE, n);

            String day2 = sdf.format(calendar.getTime());


            String day = day1 + " - " + day2;
            results.add(i, day);
            System.out.println(results);
            n+=15;
        }
        return results;
    }
}

Richard MacCutchan

Используйте счетчик, который идет от нуля до любого количества минут, которые вы хотите в общей сложности, увеличиваясь на 15. Каждый раз, когда вам нужно создать время, просто преобразуйте значение (количество минут) в часы и минуты и установите время от этого.

Lania Fatah

спасибо за ваши заметки , я попробую это сделать, спасибо

Richard MacCutchan

Используя класс Calendar, установите для него нужное время начала. Вы тогда просто несколько раз позвоните Календарь.добавить()[^] добавить 15 минут. Класс позаботится о нормализации нового времени к правильному, часу, дню и т. д.

Lania Fatah

спасибо за вашу помощь

David Crow

"но это не дает правильного решения"

Так что же это дает?

Lania Fatah

это и есть результат :

[01:15 ВЕЧЕРА - 01:30 ВЕЧЕРА,
12:15 - 12:30 ВЕЧЕРА,
11:15 - 11:30 УТРА,
10:15 - 10:30 УТРА,
09:15 - 09:30 УТРА,
08:15 - 08:30 УТРА,
07:15 - 07:30 УТРА,
06:15 - 06:30 УТРА,
05:15 - 05:30 УТРА]


но я хочу этого:
[1:00 - 1:15,
1:15 - 1:30,
1:30 - 1:45
.
.

]

David Crow

Первая странная вещь, которую я вижу, это то, что вы сидите n до 15 в верхней части петли, а затем увеличить его на 15 в нижней части петли. Последнее не служит никакой цели.

Следующее, что я вижу, - это то, что ваш код отсчитывает назад на один час за итерацию цикла (и это видно по результату), но ваш желаемый результат отсчитывает вперед. Я что-то не так понял?

На этой же ноте ваш желаемый вывод отсутствует в обозначениях AM/PM. Если это правильно, то пробовали ли вы удалить букву "а" из списка? SimpleDateFormat возражать?

Lania Fatah

спасибо за вашу помощь....

Richard MacCutchan

Используйте 24-часовой формат времени, и это будет менее запутанным. Вы не можете перейти с 12:30 вечера до 11:15 утра на 15 минут.

Lania Fatah

спасибо за вашу помощь....

1 Ответов

Рейтинг:
2

Stefan_Lang

Вы допустили следующие ошибки:

0. Это не c++! Я удалил тег C++ из вашего вопроса.
1. Нет смысла создавать новый экземпляр календаря с каждой итерацией цикла! Создайте его вне цикла!
2. Установка начального времени должна происходить только один раз, до начала цикла, а не внутри цикла. Убери его за пределы петли!
3. вы инициализируете час только в том случае, если isCurrentDay имеет значение true. Когда он ложен, каким должен быть начальный час? Вероятно, вам нужно установить какое-то значимое значение.
4. Добавление-i к часу дня не имеет никакого смысла. Уберите эту линию!
5. добавление 0 к часу ничего не делает. Уберите эту линию!
6. Вы добавляете результирующие строки в контейнер, что хорошо. Но затем вы печатаете эти результаты внутри цикла, что означает, что вы продолжаете печатать растущий список строк с каждой итерацией! Это чепуха! Переместите вывод после цикла!
7. Добавить 15 до n, но тогда масштабы цикл завершается, и N разрушена, потому что он был создан внутри цикла! Эта линия не имеет никакого эффекта. Либо удалите строку и вычислите общее смещение в каждой итерации цикла, либо переместите объявление n за пределы цикла!
На самом деле вам вообще не нужно n при рассмотрении проблемы 1: Если вы сохраняете экземпляр календаря живым вне цикла, вы можете просто увеличивать время на 15 минут с каждой итерацией.
8. Почему вы вообще печатаете результаты внутри этой функции? Он действительно возвращает результаты, поэтому вызывающий имеет возможность распечатать их, если это необходимо.

Исправление вышеперечисленных ошибок дает вам этот код:

private ArrayList<String> getTimeSet(boolean isCurrentDay) {
        ArrayList results = new ArrayList<String>();
        SimpleDateFormat sdf = new SimpleDateFormat("hh:mm a");
        Calendar calendar = new GregorianCalendar();
        calendar.set(Calendar.HOUR_OF_DAY, 0);// what should be the default?
        if(!isCurrentDay)
            calendar.set(Calendar.HOUR_OF_DAY, 9);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        for (int i = 0; i < 9; i++) {
            String  day1 = sdf.format(calendar.getTime());

            // add 15 minutes to the current time; the hour adjusts automatically!
            calendar.add(Calendar.MINUTE, 15);

            String day2 = sdf.format(calendar.getTime());

            String day = day1 + " - " + day2;
            results.add(i, day);
        }
        return results;
    }
}


Вы можете назвать это так:
ArrayList<String> results = getTimeSet(true);
System.out.println(results);

Обратите внимание, что нет необходимости следить за часом: если добавление нескольких минут перемещает сумму за пределы допустимого диапазона [0,59], то класс позаботится о соответствующей корректировке часа.


Lania Fatah

Спасибо, что нашли время помочь мне , это поможет мне получить все, что мне нужно, я действительно не знаю, как я поблагодарил вас, большое спасибо....

Lania Fatah

это мне действительно помогло , приложение живет своей жизнью.