Android: как я могу добавить 5 раз в переменную и получить общее количество секунд из них
как у меня есть 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 ответа
Простой способ сделать это, если указан формат, который вы указали, не нужно беспокоиться при преобразовании даты:
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;
}
Использовать 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
с подпакетами.
связи
- Учебник Oracle: Дата и время, объясняющие, как использовать
java.time
, - Запрос спецификации Java (JSR) 310, где
java.time
был впервые описан. - ThreeTen Backport проект, бэкпорт
java.time
в Java 6 и 7 (ThreeTen для JSR-310). - ThreeTenABP, Android-версия ThreeTen Backport
- Вопрос: Как использовать ThreeTenABP в Android Project, с очень подробным объяснением.
- Статья в Википедии: ISO 8601