Как рассчитать разницу дат в Java
Есть много способов найти разницу между датами. Ниже приведен самый простой способ найти разницу между двумя датами. Вы можете просто взять число миллисекунд между двумя объектами Date и разделить на миллисекунды в течение 24 часов со следующими правилами:
1000 milliseconds = 1 second
60 seconds = 1 minute
60 minutes = 1 hour
24 hours = 1 day
То есть, дата Разница в миллисекундах / (1000 * 60 * 60 * 24))
- Это не учитывает часовые пояса - Date всегда в UTC
- Это не займет время летнего времени ( где могут быть дни, которые составляют только 23 часа, например)
Следующая программа Java рассчитает разницу между двумя датами:
import Java.text.SimpleDateFormat;
import Java.util.Date;
public class TestClass {
public static void main(String[] args) {
SimpleDateFormat myFormat = new SimpleDateFormat("dd MM yyyy");
String inputString1 = "10 03 1995";
String inputString2 = "14 03 1995";
try{
Date oldDate = myFormat.parse(inputString1);
Date newDate = myFormat.parse(inputString2);
int diffInDays = (int)( (newDate.getTime() - oldDate.getTime())
/ (1000 * 60 * 60 * 24) );
System.out.println(diffInDays);
}catch(Exception ex){
System.out.println(ex);
}
}
}
Разница по дате в Java 8
Очень сложно точно рассчитать разницу между двумя датами на Java без использования сторонней библиотеки, если у вас нет времени на разработку собственной библиотеки Java, такой как Joda, которая целенаправленно учитывает эти вещи. К счастью, вам не нужно беспокоиться, потому что Java 8 повезло в третий раз. Java 8 предприняла первую попытку обновить этот API-интерфейс даты и времени.
Пример
import Java.time.LocalDate;
import Java.time.Period;
public class TestClass {
public static void main(String[] args) {
LocalDate oldDate = LocalDate.of(1995, 05, 01);
LocalDate now = LocalDate.now();
Period diff = Period.between(oldDate, now);
System.out.printf("Date Difference is %d years, %d months and %d days old",
diff.getYears(), diff.getMonths(), diff.getDays());
}
}
Решение для летнего времени
import Java.text.SimpleDateFormat;
import Java.util.Date;
import Java.util.Calendar;
public class TestClass {
public static void main(String[] args) {
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
calendar1.set(1995, 03, 02);
calendar2.set(1995, 03, 06);
int diff = dateFiff(calendar1,calendar2);
System.out.println(diff);
}
public static int dateFiff(Calendar date1, Calendar date2){
if (date1.get(Calendar.YEAR) == date2.get(Calendar.YEAR)) {
return Math.abs(date1.get(Calendar.DAY_OF_YEAR) - date2.get(Calendar.DAY_OF_YEAR));
} else {
if (date2.get(Calendar.YEAR) > date1.get(Calendar.YEAR)) {
Calendar temp = date1;
date1 = date2;
date2 = temp;
}
int resultDays = 0;
int dayOneOriginalYearDays = date1.get(Calendar.DAY_OF_YEAR);
while (date1.get(Calendar.YEAR) > date2.get(Calendar.YEAR)) {
date1.add(Calendar.YEAR, -1);
resultDays += date1.getActualMaximum(Calendar.DAY_OF_YEAR);
}
return resultDays - date2.get(Calendar.DAY_OF_YEAR) + dayOneOriginalYearDays ;
}
}
}
