[java] Java에서 두 날짜 간의 차이 기간을 찾는 방법은 무엇입니까?

DateTime의 두 개체가 있습니다.차이기간 을 찾아야하는 있습니다 .

다음 코드가 있지만 다음과 같이 예상되는 결과를 얻기 위해 계속하는 방법을 모르겠습니다.

      11/03/14 09:30:58
      11/03/14 09:33:43
      elapsed time is 02 minutes and 45 seconds
      -----------------------------------------------------
      11/03/14 09:30:58
      11/03/15 09:30:58
      elapsed time is a day
      -----------------------------------------------------
      11/03/14 09:30:58
      11/03/16 09:30:58
      elapsed time is two days
      -----------------------------------------------------
      11/03/14 09:30:58
      11/03/16 09:35:58
      elapsed time is two days and 05 mintues

암호

    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 % 60;
    long diffMinutes = diff / (60 * 1000) % 60;
    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.");



답변

다음을 시도하십시오

{
        Date dt2 = new DateAndTime().getCurrentDateTime();

        long diff = dt2.getTime() - dt1.getTime();
        long diffSeconds = diff / 1000 % 60;
        long diffMinutes = diff / (60 * 1000) % 60;
        long diffHours = diff / (60 * 60 * 1000);
        int diffInDays = (int) ((dt2.getTime() - dt1.getTime()) / (1000 * 60 * 60 * 24));

        if (diffInDays > 1) {
            System.err.println("Difference in number of days (2) : " + diffInDays);
            return false;
        } else if (diffHours > 24) {

            System.err.println(">24");
            return false;
        } else if ((diffHours == 24) && (diffMinutes >= 1)) {
            System.err.println("minutes");
            return false;
        }
        return true;
}


답변

날짜 차이 변환은 Java 내장 클래스 인 TimeUnit을 사용하여 더 나은 방식으로 처리 할 수 ​​있습니다 . 이를위한 유틸리티 메소드를 제공합니다.

Date startDate = // Set start date
Date endDate   = // Set end date

long duration  = endDate.getTime() - startDate.getTime();

long diffInSeconds = TimeUnit.MILLISECONDS.toSeconds(duration);
long diffInMinutes = TimeUnit.MILLISECONDS.toMinutes(duration);
long diffInHours = TimeUnit.MILLISECONDS.toHours(duration);
long diffInDays = TimeUnit.MILLISECONDS.toDays(duration);


답변

사용 Joda 타임 라이브러리

DateTime startTime, endTime;
Period p = new Period(startTime, endTime);
long hours = p.getHours();
long minutes = p.getMinutes();

Joda Time에는 시간 간격의 개념이 있습니다.

Interval interval = new Interval(oldTime, new Instant());

날짜 차이의

하나 더 링크

또는 Java-8 (Joda-Time 개념 통합)

Instant start, end;//
Duration dur = Duration.between(start, stop);
long hours = dur.toHours();
long minutes = dur.toMinutes();


답변

다음은 shamimz의 답변처럼 Java 8에서 문제를 해결할 수있는 방법입니다.

출처 : http://docs.oracle.com/javase/tutorial/datetime/iso/period.html

LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(1960, Month.JANUARY, 1);

Period p = Period.between(birthday, today);
long p2 = ChronoUnit.DAYS.between(birthday, today);

System.out.println("You are " + p.getYears() + " years, " + p.getMonths() + " months, and " + p.getDays() + " days old. (" + p2 + " days total)");

이 코드는 다음과 유사한 출력을 생성합니다.

You are 53 years, 4 months, and 29 days old. (19508 days total)

시간, 분, 초 차이를 얻으려면 LocalDateTime http://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html 을 사용해야 합니다.


답변

Date d2 = new Date();
Date d1 = new Date(1384831803875l);

long diff = d2.getTime() - d1.getTime();
long diffSeconds = diff / 1000 % 60;
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = diff / (60 * 60 * 1000);
int diffInDays = (int) diff / (1000 * 60 * 60 * 24);

System.out.println(diffInDays+"  days");
System.out.println(diffHours+"  Hour");
System.out.println(diffMinutes+"  min");
System.out.println(diffSeconds+"  sec");


답변

다음과 같은 방법을 만들 수 있습니다.

public long getDaysBetweenDates(Date d1, Date d2){
return TimeUnit.MILLISECONDS.toDays(d1.getTime() - d2.getTime());
}

이 메서드는 2 일 사이의 일 수를 반환합니다.


답변

Michael Borgwardt가 여기에 답변을 썼습니다 .

int diffInDays = (int)( (newerDate.getTime() - olderDate.getTime())
                 / (1000 * 60 * 60 * 24) )

이것은 UTC 날짜와 함께 작동하므로 현지 날짜를 보면 차이가 날 수 있습니다. 그리고 현지 날짜로 올바르게 작동하려면 일광 절약 시간으로 인해 완전히 다른 접근 방식이 필요합니다.