두 Joda-Time DateTime의 차이점을 분 단위로 찾는 방법


141

아래는 내가 쓴 방법입니다.

public List<Map<String, Object>> loadNotYetInEmployee(int shift, Date date,
        int transitionVal, String type, User user) {

    DateTime datetime = new DateTime(date);
    datetime = datetime
            .plus(Period.minutes(shiftTiming.getSession1InTime()));

    List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();

    sql = SqlMapUtils.getSql("attendance.attendancestatus.latein",
            parameters);
    result = getJdbcTemplate().queryForList(sql);
    for (int i = 0; i < result.size(); i++) {
        Date punchInTime = (Date) result.get(i).get("punchtime");
        DateTime punchTime = new DateTime(punchInTime);
    }
    return result;
}

이제 내 방법 에서 객체에 Joda-Time DateTime 객체가 datetime있고 결과에서 jodatime으로 변환하는 타임 스탬프가 하나 있음을 알 수 punchTime있습니다. 이제이 두 날짜 사이의 차이점을 찾으려면 어떻게해야합니까?



2
그러나 이것은 DateTime 객체가 동일한 TimeZone에있는 경우에만 작동합니다.
Tiago

답변:


79

이렇게하면 두 DateTime 객체의 차이를 밀리 초 단위로 얻을 수 있습니다.

DateTime d1 = new DateTime();
DateTime d2 = new DateTime();

long diffInMillis = d2.getMillis() - d1.getMillis();

78
MadProgrammer의 답변은 수락 된 답변이어야합니다. 의 간단한 사용법에 주목하십시오 Minutes.minutesBetween.
Basil Bourque

5
동의하지 않습니다. 너무 말이 많고 명확하지 않습니다. "펀치 시간 날짜 시간 사이의 분 분"이 "두 번째 날짜 밀리 초에서 첫 번째 날짜 밀리 초를 뺀 시간"보다 나쁩니다.
Jonathan Neufeld

4
이것은 일광 절약 시간을 고려하지 않습니다.
샌더 Versluys

454

뭔가 ...

DateTime today = new DateTime();
DateTime yesterday = today.minusDays(1);

Duration duration = new Duration(yesterday, today);
System.out.println(duration.getStandardDays());
System.out.println(duration.getStandardHours());
System.out.println(duration.getStandardMinutes());

어떤 출력

1
24
1440

또는

System.out.println(Minutes.minutesBetween(yesterday, today).getMinutes());

아마 당신이 쫓고있는 것보다


위의 시간대를 고려합니까? 아니면 먼저 UTC / GMT로 변환해야합니까?
Doo Dah

@DooDah 좋은 질문입니다. (JodaTime의 개념이있는 것처럼) "믿습니다" LocalTime,하지만 테스트하고 볼 것을 제안합니다. 문제는 어느 시간대에서 결과 값이 표현 될 것인가이다.
MadProgrammer

나는 이것을 테스트하고 알아낼 것이다. 나에게 결과 시간대는 코드가 실행되는 서버 일 것입니다. 예약 대기열을 구현 중이며 다른 시간대의 날짜를 기준으로 현재 시간과 미래 시간 사이의 시간을 계산해야합니다. 찾은 내용을 다시보고하겠습니다.
Doo Dah

2
이 답변이 선택되어 있어야합니다. 깔끔하고 단순합니다.
Sid

시차를 얻기 위해 새로운 Duration 객체를 만드는 것은 멋지지 않습니다. 많은 날짜 / 시간 객체 배열에서 시차를 수행해야한다고 상상해보십시오.
AndroidDev

7

뭔가 ...

Minutes.minutesBetween(getStart(), getEnd()).getMinutes();

시작 날짜와 종료 날짜가 실제로 너무 멀리 떨어져 있으면 실패합니다 (int 크기보다 큼)
dannyRods

3
DateTime d1 = ...;
DateTime d2 = ...;
Period period = new Period(d1, d2, PeriodType.minutes());
int differenceMinutes = period.getMinutes();

실제로 나는 이것이 항상을 기반으로 한 답변과 동일한 결과를 줄 것이라고 생각합니다 Duration. 그러나 분이 아닌 다른 시간 단위의 경우 더 정확할 수 있습니다. 예를 들어 2016/2/2에서 2017/2/1까지 365 일이 있지만 실제로는 1 년 미만이며를 사용하는 경우 0 년으로 잘립니다 PeriodType.years().

이론적으로 윤초로 인해 몇 분 동안 동일하게 발생할 수 있지만 Joda는 윤초를 지원하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.