Вопрос-ответ

Calculate date/time difference in java [duplicate]

Вычислить разницу в дате / времени в java

Я хочу рассчитать разницу между 2 датами в часах / минутах / секундах.

У меня небольшая проблема с моим кодом, вот она :

String dateStart = "11/03/14 09:29:58";
String dateStop = "11/03/14 09:33:43";

// Custom date format
SimpleDateFormat format = new SimpleDateFormat("yy/MM/dd HH:mm:ss");

Date d1 = null;
Date d2 = null;
try {
d1 = format.parse(dateStart);
d2 = format.parse(dateStop);
} catch (ParseException e) {
e.printStackTrace();
}

// Get msec from each, and subtract.
long diff = d2.getTime() - d1.getTime();
long diffSeconds = diff / 1000;
long diffMinutes = diff / (60 * 1000);
long diffHours = diff / (60 * 60 * 1000);
System.out.println("Time in seconds: " + diffSeconds + " seconds.");
System.out.println("Time in minutes: " + diffMinutes + " minutes.");
System.out.println("Time in hours: " + diffHours + " hours.");

Это должно привести к :

Time in seconds: 45 seconds.
Time in minutes: 3 minutes.
Time in hours: 0 hours.

Однако я получаю этот результат :

Time in seconds: 225 seconds.
Time in minutes: 3 minutes.
Time in hours: 0 hours.

Кто-нибудь может увидеть, что я здесь делаю не так?

Переведено автоматически
Ответ 1

Я бы предпочел использовать предложенный java.util.concurrent.TimeUnit класс.

long diff = d2.getTime() - d1.getTime();//as given

long seconds = TimeUnit.MILLISECONDS.toSeconds(diff);
long minutes = TimeUnit.MILLISECONDS.toMinutes(diff);
Ответ 2

попробуйте

long diffSeconds = diff / 1000 % 60;  
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = diff / (60 * 60 * 1000);

ПРИМЕЧАНИЕ: предполагается, что diff неотрицательно.

Ответ 3

Если вы можете использовать внешние библиотеки, я бы порекомендовал вам использовать Joda-Time, отметив, что:


Joda-Time - это де-факто стандартная библиотека даты и времени для Java до Java SE 8. Теперь пользователям предлагается перейти на java.time (JSR-310).


Пример для вычисления между:

Seconds.between(startDate, endDate);
Days.between(startDate, endDate);
Ответ 4

Попробуйте это для удобного представления разницы во времени (в миллисекундах):

String friendlyTimeDiff(long timeDifferenceMilliseconds) {
long diffSeconds = timeDifferenceMilliseconds / 1000;
long diffMinutes = timeDifferenceMilliseconds / (60 * 1000);
long diffHours = timeDifferenceMilliseconds / (60 * 60 * 1000);
long diffDays = timeDifferenceMilliseconds / (60 * 60 * 1000 * 24);
long diffWeeks = timeDifferenceMilliseconds / (60 * 60 * 1000 * 24 * 7);
long diffMonths = (long) (timeDifferenceMilliseconds / (60 * 60 * 1000 * 24 * 30.41666666));
long diffYears = timeDifferenceMilliseconds / ((long)60 * 60 * 1000 * 24 * 365);

if (diffSeconds < 1) {
return "less than a second";
} else if (diffMinutes < 1) {
return diffSeconds + " seconds";
} else if (diffHours < 1) {
return diffMinutes + " minutes";
} else if (diffDays < 1) {
return diffHours + " hours";
} else if (diffWeeks < 1) {
return diffDays + " days";
} else if (diffMonths < 1) {
return diffWeeks + " weeks";
} else if (diffYears < 1) {
return diffMonths + " months";
} else {
return diffYears + " years";
}
}
java