показать оставшиеся минуты вместо часов - PullRequest
0 голосов
/ 02 мая 2018

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

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);
    }

KOD: код

1 Ответ

0 голосов
/ 02 мая 2018

Решение Barebones:

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

Для лучшего решения используйте java.time, современный 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 (от 26 уровня API, как мне сказали) современный API поставляется встроенным.
  • В Java 6 и 7 получите ThreeTen Backport, бэкпорт новых классов (ThreeTen для JSR 310; см. Ссылки внизу).
  • На (более старых) Android используется версия Android ThreeTen Backport. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из org.threeten.bp с подпакетами.

Ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...