Как отобразить время добавления 30 минут от текущего времени - PullRequest
0 голосов
/ 19 февраля 2019

Я просто хочу, чтобы он отображался с текущего времени с добавлением 30 минут до конца дня. Сегодняшнее время - 9:46. Оно должно отображаться как 10:00AM,10:30AM,11:00AM....11:30PM для этой конкретной даты.Но вот в моем коде его отображение с 00:00 ... 23:30 на весь день.Вот мой код:

SimpleDateFormat df = new SimpleDateFormat("HH:mm");
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        int startDate = cal.get(Calendar.DATE);
        while (cal.get(Calendar.DATE) == startDate) {
            Log.d("time","currenttime"+cal.getTime());
            cal.add(Calendar.MINUTE, 30);
        }

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

java.time и ThreeTenABP

    Duration interval = Duration.ofMinutes(30);
    DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm");
    ZoneId zone = ZoneId.of("Europe/Podgorica");
    ZonedDateTime now = ZonedDateTime.now(zone);
    // Start at a whole half hour no earlier than now
    ZonedDateTime start = now.truncatedTo(ChronoUnit.HOURS);
    while (start.isBefore(now)) {
        start = start.plus(interval);
    }
    // End when a new day begins
    ZonedDateTime limit = now.toLocalDate().plusDays(1).atStartOfDay(zone);

    // Iterate
    ZonedDateTime currentTime = start;
    while (currentTime.isBefore(limit)) {
        System.out.println(currentTime.format(timeFormatter));
        currentTime = currentTime.plus(interval);
    }

Когда я только что запустил сниппет, я получил следующий вывод:

20:30
21:00
21:30
22:00
22:30
23:00
23:30

Конечно, подставьте свойжелаемый часовой пояс, в который я поместил Европу / Подгорицу.

Я использовал следующий импорт:

import org.threeten.bp.Duration;
import org.threeten.bp.ZoneId;
import org.threeten.bp.ZonedDateTime;
import org.threeten.bp.format.DateTimeFormatter;
import org.threeten.bp.temporal.ChronoUnit;

Вопрос: Могу ли я использовать java.time на своем уровне API Android?

Да, java.time прекрасно работает на старых и новых устройствах Android.Для этого требуется как минимум Java 6 .

  • В Java 8 и более поздних версиях и на новых устройствах Android (начиная с уровня API 26) современный API поставляется встроенным.В этом случае импортируйте из java.time с подпакетами (не org.threeten.bp).
  • В Java 6 и 7 получите ThreeTen Backport, бэкпорт новых классов (ThreeTen для JSR 310, где использовался современный API).сначала описано).
  • На (более старой) версии Android используйте версию Android ThreeTen Backport.Это называется ThreeTenABP.Убедитесь, что вы импортируете классы даты и времени из пакета org.threeten.bp и подпакетов.

Ссылки

0 голосов
/ 19 февраля 2019

Используйте "HH:mm" для 24-часового формата и "hh:mm a" для 12-часового формата

Обновление 1

Ниже приведен полный пример, который отображает, что вы хотите натекстовое представление:

    TextView timeNow = findViewById(R.id.time_now);

    Calendar cal, atMidnight;

    //SimpleDateFormat df = new SimpleDateFormat("dd/MM/YYYY hh:mm a");
    SimpleDateFormat df = new SimpleDateFormat("hh:mm a");

    cal = Calendar.getInstance();
    atMidnight = Calendar.getInstance();

    atMidnight.add(Calendar.DATE, 1);
    atMidnight.set(Calendar.HOUR_OF_DAY, 0);
    atMidnight.set(Calendar.MINUTE, 0);
    atMidnight.set(Calendar.SECOND, 0);

    cal.add(Calendar.MINUTE, 30);

    String txt = "";

    while (cal.getTime().getTime() < atMidnight.getTime().getTime()) {
        txt = txt + df.format(cal.getTime()) + "\n";
        cal.add(Calendar.MINUTE, 30);
    }

    timeNow.setText(txt);

Обновление 2

Чтобы округлить минуты до следующих 30 минут, вы можете сделать следующее:

while (cal.getTime().getTime() < atMidnight.getTime().getTime()) {
    int unroundedMinutes = cal.get(Calendar.MINUTE);
    int mod = unroundedMinutes % 30;
    cal.add(Calendar.MINUTE, 30-mod);
    txt = txt + df.format(cal.getTime()) + "\n";
    cal.add(Calendar.MINUTE, 30);
    }

timeNow.setText(txt);
...