2014-04-01 2 views
1

두 날짜를 비교하려고합니다. 여기 내 날짜는 ...자바 날짜 비교 도움말이 필요합니다

Date dbLastModified = getBulletinBarMessageLastModified(); 
Date bulletinBarMessageLastModified = bulletinBarForm.getLastModified(); 

if (dbLastModified.after(bulletinBarMessageLastModified)){ 
    throw new ReportingManagerOptimisticLockingException(optimisticLockingMessage); 
} 

public Date getBulletinBarMessageLastModified() { 
    Timestamp lastModifiedTimestamp = getJdbcTemplate().queryForObject(BULLETIN_BAR_MSG_LAST_MODIFIED_SQL,Timestamp.class); 
    Date lastModifiedDate = new Date(lastModifiedTimestamp.getTime()); 
    return lastModifiedDate; 
} 

를 ... 코드를 비교한다

dbLastModified - Tue Apr 01 22:29:04 EST 2014 
bulletinBarMessageLastModified - Tue Apr 01 22:29:04 EST 2014 

좀 날짜가 왜 내 코드를 던지고있다 (예 : 두 것과 같은) 겉보기에 동일한 경우에도 이유에 혼란 스러워요 ReportingManagerOptimisticLockingException 예외는 다른 하나가 이고 다른 하나가 인 것을 나타냅니다. 날짜 비교에 대한 나의 이해가 잘못 되었습니까?

+4

날짜는 밀리 초 단위로 저장되므로 동일하게 보더라도 밀리 초 단위로 실제로 달라질 수 있습니다. –

+2

타임 스탬프가 버전 데이터 유형으로 안정적으로 작동하지 않습니다. 클라이언트의 타임 스탬프 해결 방법 중 하나는 DB OS와 DB 자체가 다를 수 있습니다. 그리고 상당히 높은 해상도로도 동일한 순간에 두 건의 업데이트가 발생하고 다른 버전으로 감지되지 않는 경우가 있습니다. – Ralf

+0

예. 너희들이 옳았다. 감사합니다 ..... 첫 데이트 : 2014-04-02T08 : 35 : 12.000 + 1100 ...... 두 번째 데이트 : 2014-04-02T08 : 35 : 12.015 + 1100 – Richie

답변

2

Timestamp.getTime()뿐만 아니라 나노초을 고려합니다. 심지어 toString()도 동일한 출력을 반환하지만 실제로는 나노 차이가 있습니다.

그러나 java.util.Date밀리 초 다루고있다.

+0

Notreally. 'after'는 날짜를 처리하기 때문에 밀리 초만 비교합니다. 밀리 초 차이가있는 것처럼 보입니다. 그러나 OP가 날짜를 가장 가까운 초로 인쇄하기 때문에 이것이 나타나지 않습니다. 'TimeStamp'의 나노초는 이것과 아무런 관련이 없습니다. –

1

Here

는 다음을 읽을 수 있습니다 :

Tests if this date is after the specified date. 

Parameters: 
    when - a date. 
Returns: 
    true if and only if the instant represented by this Date object is strictly later than the instant represented by when; false 

그렇지 않으면

공공 부울 후 (일 때)

후. 예외 : NullPointerException - null가있는 경우.

지금, 그것은 Java 버그 dbLastModified 중 하나는 정말 몇 나노초로 bulletinBarMessageLastModified 후이다.

dbLastModified.after(dbLastModified) 

그때는 아마 Java 버그가 아니라, 그렇게 두 번째 날짜가 몇 나노초로 처음 후에는 것을 일 : 다음과 같은 경우

false입니다.

관련 문제