Android: как я могу добавить 5 раз в переменную и получить общее количество секунд из них - PullRequest
0 голосов
/ 13 сентября 2018

как у меня есть 5 раз

1. 05:12:02
2. 19:12:52
3. 40:12:14
4. 56:54:10
5. 41:12:12
-----------
Total Seconds : 0#####..`
-----------

Я хочу вот так, как я могу, пожалуйста, помогите мне.

я могу использовать это? :

 public String addTime(int hour, int minute, int minutesToAdd) {
    Calendar calendar = new GregorianCalendar(1990, 1, 1, hour, minute);
    calendar.add(Calendar.MINUTE, minutesToAdd);
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
    String date = sdf.format(calendar.getTime());
    return date;
}

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Используйте класс Duration из java.time (современный API даты и времени Java):

    String[] times = {
            "05:12:02",
            "19:12:52",
            "40:12:14",
            "56:54:10",
            "41:12:12"
    };
    Duration timeSum = Duration.ZERO;
    for (String time : times) {
        // reformat to ISO 8601
        time = time.replaceFirst("(\\d{2}):(\\d{2}):(\\d{2})", "PT$1H$2M$3S");
        // add
        timeSum = timeSum.plus(Duration.parse(time));
    }
    System.out.println("Total seconds: " + timeSum.getSeconds());

Выход:

Всего секунд: 585810

Класс Duration не может напрямую анализировать ваши строки времени. Он анализирует стандартный формат ISO 8601, поэтому я использую регулярное выражение для преобразования 05:12:02 в PT05H12M02S. Затем я передаю это в Duration.parse. Вы можете прочитать строку ISO 8601 как «период времени 05 часов 12 минут 02 секунды».

Классы, предназначенные для дат и времени - Date, Calendar, LocalTime и т. Д., - плохо подходят для количества времени. Date и Calendar, кроме того, давно устарели и плохо спроектированы, так что не пробуйте их. Хотя было бы невозможно обойтись, есть некоторые подводные камни, и даже если вам это удастся, вам будет сложно прочитать код и убедить себя в его правильности.

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

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

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

Ссылки

0 голосов
/ 13 сентября 2018

Простой способ сделать это, если указан формат, который вы указали, без необходимости беспокоиться при преобразовании даты:

int totalSum = getSecondsFromDate("05:12:02") + getSecondsFromDate("19:12:52") + getSecondsFromDate("40:12:14") + getSecondsFromDate("56:54:10") + getSecondsFromDate("41:12:12");

private int getSecondsFromDate(String date){
  //We split the date to have hours, minutes and seconds
  String splitDate = date.split(":");
  int hours = Integer.parseInt(splitDate[0]);
  int minutes = Integer.parseInt(splitDate[1]);
  int seconds = Integer.parseInt(splitDate[2]);

  int totalSeconds = (hours*60*60) + (minutes*60) + seconds;
  return totalSeconds;
}
...