Как рассчитать разницу дат в Java

Есть много способов найти разницу между датами. Ниже приведен самый простой способ найти разницу между двумя датами. Вы можете просто взять число миллисекунд между двумя объектами Date и разделить на миллисекунды в течение 24 часов со следующими правилами:

 
      1000 milliseconds = 1 second
      60 seconds = 1 minute
      60 minutes = 1 hour
      24 hours = 1 day

То есть, дата Разница в миллисекундах / (1000 * 60 * 60 * 24))

  1. Это не учитывает часовые пояса - Date всегда в UTC
  2. Это не займет время летнего времени ( где могут быть дни, которые составляют только 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 ;
    }
  }
}

Источник: http://net-informations.com/Java/cJava/dates.htm

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector