Как рассчитать разницу дат в 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 ; } } }