как у меня 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
user7616371 13 Сен 2018 в 12:59

2 ответа

Лучший ответ

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

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;
}
0
Alex Bean 13 Сен 2018 в 10:37

Используйте класс 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 используется версия ThreeTen Backport для Android. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из org.threeten.bp с подпакетами.

Связи

2
Ole V.V. 13 Сен 2018 в 14:29