Используйте класс 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
с подпакетами.
Ссылки