Показывать оставшиеся минуты вместо часов

Мне нужна твоя помощь показать оставшиеся минуты вместо часов

15 минут вместо 15:30

Образец: время до начала бронирования: 15 минут

 private Notification getNotification(Date countdownEnds) {
    DateFormat timeFormat = countdownTimeFormatFactory.getTimeFormat();
    String countdownEndsString = timeFormat.format(countdownEnds);
    String title = resources.getString(R.string.countdown_notification_title);
    String text = resources.getString(R.string.countdown_notification_text, countdownEndsString);

    PendingIntent tapIntent =
            PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
            .setContentTitle(title)
            .setContentText(text)
            .setTicker(title)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setPriority(NotificationCompat.PRIORITY_DEFAULT)
            .setContentIntent(tapIntent)
            .setOngoing(true)
            .setAutoCancel(false);

    return builder.build();
}




   public DateFormat getTimeFormat() {
        return android.text.format.DateFormat.getTimeFormat(context);
    }

код: код

15 минут вместо 15:30. Насколько я понимаю из вашего вопроса, это не имеет смысла. 15 - это час, а не минута.
Kunu 02.05.2018 13:21

Неужели 15:30 - это время окончания обратного отсчета (или 15:30), а когда время 15:15, то есть осталось 15 минут, вы хотите отобразить «15 минут»? Вы можете получить много вдохновения от Java вычислить время до события с текущего времени. Пожалуйста, ищите больше интересных и полезных вопросов и ответов.

Ole V.V. 02.05.2018 14:45
7
2
135
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Решение Barebones:

    long remainingMillis = countdownEnds.getTime() - System.currentTimeMillis();
    long remainingMinutes = TimeUnit.MILLISECONDS.toMinutes(remainingMillis);
    String countdownEndsString = String.format("%d minutes", remainingMinutes);

Для более удобного решения используйте java.time, современный API даты и времени Java, для расчета минут:

    long remainingMinutes = ChronoUnit.MINUTES.between(
            Instant.now(), DateTimeUtils.toInstant(countdownEnds));

В этом случае также посмотрите, сможете ли вы полностью отказаться от использования Date, поскольку этот класс давно устарел, а все функции и многое другое находится в java.time. В последнем фрагменте я использую ThreeTen Backport (см. Объяснение и ссылки ниже) и его класс DateTimeUtils. Для тех, кто читает и использует Java 8 или новее и до сих пор не избавился от класса Date, преобразование встроено в этот класс, так что это еще немного проще:

    long remainingMinutes 
            = ChronoUnit.MINUTES.between(Instant.now(), countdownEnds.toInstant());

Вы также можете изучить класс Duration для java.time.

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

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

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

Ссылки

Другие вопросы по теме