Хороший ответ от tomgeraghty3 может быть всем, что вам нужно. Я добавляю приложение.
java .time и ThreeTenABP
Если я правильно понял, у вас действительно было два требования:
- Вы должны уметь для представления времени начала и окончания в формате
HH:mm:ss
. - Вам необходимо указать время между началом и концом в секундах.
Не представляйте время в виде строк, хотя , Делать вычисления на них довольно безнадежно. Представьте свое время правильными объектами даты и времени. Форматировать в строки можно только в том случае, если необходимо выдать строку.
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
ZonedDateTime start = ZonedDateTime.now(ZoneId.systemDefault());
TimeUnit.SECONDS.sleep(175); // Simulate that time passes
ZonedDateTime end = ZonedDateTime.now(ZoneId.systemDefault());
long diffSeconds = ChronoUnit.SECONDS.between(start, end);
System.out.printf("From %s until %s was %d seconds",
start.format(timeFormatter), end.format(timeFormatter), diffSeconds);
Пример выполнения:
С 05:49:41 до 05:52:36 было 175 секунд
Конечно, чтобы увидеть, как он работает, сначала введите меньшее число, например 3 или 6. Вместо 175.
Если печать в формате HH:mm:ss
не была обязательной, вы можете использовать Instant
вместо ZonedDateTime
как в ответе tomgeraghty3. Поскольку Instant
не зависит от часового пояса, вы бы пропустили аргумент для метода now
:
Instant start = Instant.now();
Аналогично для end
.
В зависимости от работы, которую вы Необходимо указать значение, которое вы можете рассмотреть для класса Duration
, чтобы представить разницу, а не просто для подсчета секунд. Это также продемонстрировано в ответе tomgeraghty3.
Вопрос: Разве java .time не требует Android API уровня 26?
java .time хорошо работает на обоих старых и более новые Android устройства. Для этого требуется как минимум Java 6 .
- В Java 8 и более поздних версиях и на более новых Android устройствах (от уровня API 26) современный встроенный API -in.
- В не- Android Java 6 и 7 получите ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. ссылки внизу).
- Вкл. (Старше) Android используйте версию ThreeTen Backport Android. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из
org.threeten.bp
с подпакетами.
Ссылки