Android Java: как вычесть два раза?
Я использую какой-то секундомер в моем проекте, и у меня есть
start time ex: 18:40:10 h
stop time ex: 19:05:15 h
Мне нужно получить результат от двух значений, таких как final time = stop - start
Я нашел несколько примеров, но все они очень запутывают.
Есть ли какое-нибудь простое решение?
Ответы
Ответ 1
Если у вас есть строки, вам нужно проанализировать их в 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, чтобы получить дробную часть ваших секунд.
Ответ 2
Предполагая, что вы используете java.util.Date:
long totalTime = endDate.getTime() - startDate.getTime();
Результатом будет общее время в миллисекундах.
Ответ 3
Попробуйте этот ответ, он вам очень поможет
отсюда
В этом ответе вы найдете, что вычтите два раза, отбрасывая день, месяц и год.
он дает вам количество минут, которые вы потратите, пока не достигнете второго значения времени.
Ответ 4
Я даю современный ответ.
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, намного приятнее работать.
Но разве это не требует API уровня 26?
Нет, использование java.time прекрасно работает на старых и новых устройствах Android. Для этого требуется как минимум Java 6.
- В Java 8 и более поздних версиях, а также на более новых устройствах Android (с уровня API 26) встроен современный API.
- В не-Android Java 6 и 7 получают ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. ссылки внизу).
- На (более старом) Android используйте Android-версию ThreeTen Backport. Его называют ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из
org.threeten.bp
с подпакетами.
Ссылки