Android Java: как вычесть два раза?

В доступе; попробуйте варианты и выберите и более ранний метод шифрования ike 2007 метод шифрования. Новые методы шифрования могут не работать с провайдером. Это можно назвать «Использовать устаревшее шифрование».

13
задан Peter Lang 18 August 2010 в 17:14
поделиться

3 ответа

Если у вас есть строки, вам нужно проанализировать их в java.util.Date, используя java.text.SimpleDateFormat. Примерно так:

        java.text.DateFormat df = new java.text.SimpleDateFormat("hh:mm:ss");
        java.util.Date date1 = df.parse("18:40:10");
        java.util.Date date2 = df.parse("19:05:15");
        long diff = date2.getTime() - date1.getTime();

Здесь diff - количество миллисекунд, прошедших между 18:40:10 и 19:05:15.

РЕДАКТИРОВАТЬ 1:

Нашел для этого в Интернете метод (на http://www.javaworld.com/javaworld/jw-03-2001/jw-0330-time.html?page=2 ):

  int timeInSeconds = diff / 1000;
  int hours, minutes, seconds;
  hours = timeInSeconds / 3600;
  timeInSeconds = timeInSeconds - (hours * 3600);
  minutes = timeInSeconds / 60;
  timeInSeconds = timeInSeconds - (minutes * 60);
  seconds = timeInSeconds;

РЕДАКТИРОВАТЬ 2:

Если вы хотите, чтобы это была строка (это небрежный способ, но он работает):

String diffTime = (hours<10 ? "0" + hours : hours) + ":" + (minutes < 10 ? "0" + minutes : minutes) + ":" + (seconds < 10 ? "0" + seconds : seconds) + " h";

РЕДАКТИРОВАТЬ 3:

Если вам нужны миллисекунды, просто сделайте это

long timeMS = diff % 1000;

Затем вы можете разделить это на 1000, чтобы получить дробную часть ваших секунд.

30
ответ дан 1 December 2019 в 18:04
поделиться

Я предоставляю современный ответ.

Вывод java.time и ThreeTenABP

    DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("H:mm:ss 'h'");

    String startTimeString = "18:40:10 h";
    String stopTimeString = "19:05:15 h";

    LocalTime startTime = LocalTime.parse(startTimeString, timeFormatter);
    LocalTime stopTime = LocalTime.parse(stopTimeString, timeFormatter);

    if (stopTime.isBefore(startTime)) {
        System.out.println("Stop time must not be before start time");
    } else {
        Duration difference = Duration.between(startTime, stopTime);

        long hours = difference.toHours();
        difference = difference.minusHours(hours);
        long minutes = difference.toMinutes();
        difference = difference.minusMinutes(minutes);
        long seconds = difference.getSeconds();

        System.out.format("%d hours %d minutes %d seconds%n", hours, minutes, seconds);
    }

от этого примера:

0 часов 25 минут 5 секунд

другие ответы были хорошими ответами в 2010. Сегодня избегайте классов DateFormat, SimpleDateFormat и Date. java.time, современный API даты и времени Java, настолько более хорош работать с.

, Но doesn’t это требует уровня API 26?

нет, с помощью java.time работает приятно над более старыми и более новыми устройствами на базе Android. Это просто требует по крайней мере [1 129] Java 6.

  • В Java 8 и позже и на более новых устройствах на базе Android (от уровня API 26) современный API прибывает встроенный.
  • В не-Android Java 6 и 7 получают Бэкпорт ThreeTen, бэкпорт современных классов (ThreeTen для JSR 310; см. ссылки внизу).
  • На (более старом) Android используют выпуск Android Бэкпорта ThreeTen. It’s по имени ThreeTenABP. И удостоверьтесь, что Вы импортируете классы даты и времени от org.threeten.bp с подпакетами.

Ссылки

0
ответ дан 1 December 2019 в 18:04
поделиться

Предполагая, что вы используете java.util.Date:

long totalTime = endDate.getTime() - startDate.getTime();

Результатом будет общее время в миллисекундах.

13
ответ дан 1 December 2019 в 18:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: