자바 util타임스탬프.밀리초를 비교할 때 다음()이 잘못되었습니까?
오라클 데이터베이스에서 날짜를 빼내고 있습니다.java.util에 설정되어 있습니다.날짜 필드와 실제 java.sql에 있습니다.(Java.util의 하위 클래스인) 타임스탬프 인스턴스입니다.날짜). 첫 번째 날짜에 () 뒤에 전화를 걸어 서로 다른 두 데이터베이스 레코드에서 이 타임스탬프 중 두 개를 비교하고 두 번째와 비교하면 밀리초를 제외한 날짜의 모든 부분이 동일할 때 오답이 됩니다.
다음은 모두 "true"가 되어야 하지만, 두 번째 숫자 집합은 그렇지 않습니다.
firstDate = 1/1/2000 12:00:20:00
secondDate = 1/1/2000 12:00:10:00
result = firstDate.after(secondDate);
result is TRUE <-- EXPECTED RESULT
firstDate = 1/1/2000 12:00:00:10
secondDate = 1/1/2000 12:00:00:00
result = firstDate.after(secondDate);
result is FALSE <-- NOT EXPECTED, result should be TRUE
나노는 타임스탬프 클래스의 Date 인스턴스와 별도로 저장되어 있는 것으로 알고 있는데 이것이 문제인지 궁금합니다.
그것들을 비교할 수 있지만, 오직 밀리를 비교해야만 합니다.상당히 추하기는 하지만 모든 경우에 효과가 있는 것 같습니다. (어떤 경우든 상관없이)java.sql.Timestamp
아니면java.util.Date
).
if(date1.getTime() > date2.getTime()) {
//...
}
여기서 문제의 핵심은 타임스탬프가 날짜 개체로 캐스트되는 시점입니다.타임스탬프의 애프터 메서드 대신 날짜의 애프터 메서드가 사용되고 있습니다.날짜로 캐스트하지 않으면 타임스탬프의 애프터 메소드가 올바르게 작동합니다.
타임스탬프의 애프터 메소드가 다음 코드에서 호출되지 않는 이유에 대해 공변 메소드 매개 변수에 대한 레슨이 필요할 것 같습니다.
java.sql.Timestamp one = new java.sql.Timestamp(1266873627200L);
java.sql.Timestamp two = new java.sql.Timestamp(1266873627000L);
java.util.Date oneDate = (java.util.Date) one;
java.util.Date twoDate = (java.util.Date) two;
System.out.println("one: " + oneDate.getTime());
System.out.println("two: " + twoDate.getTime());
if (oneDate.after(twoDate)) {
System.out.println(oneDate.getTime() + " after " + twoDate.getTime());
} else {
System.out.println(twoDate.getTime() + " after " + oneDate.getTime());
}
결과.
one: 1266873627200
two: 1266873627000
1266873627000 after 1266873627200
문제는 첫번째 날짜와 두번째 날짜가 Java.util로 설정되어 있다는 것입니다.java.sql용 JavaDoc을 제외한 날짜 개체.타임스탬프에는 java.util의 합성이라고 나와 있습니다.날짜 및 별도의 나노초 값입니다.
이것이 두 가지를 비교하려고 할 때 거짓으로 돌아오는 이유입니다.firstDate와 secondDate over를 실제 타임스탬프 개체로 변경한 경우에는 작동해야 합니다.
실제 코드가 없으면 추측이지만, 제 생각에 당신의 물건들 중 하나는java.util.Date
그리고 또 하나는java.sql.Timestamp
당신은 그것들을 실제로 비교할 수 없습니다.millis
'Timestamp'의 필드는 1초로 잘리고 나머지는 에 저장됩니다.nanos
야전. 정말 안타깝습니다.Timestamp
의 하위 클래스입니다.Date
. 이것은 분명히 여러분이 겪고 있는 문제로 이어집니다.
편집.
한 가지 가능성은 DB 드라이버가 자체 하위 클래스를 반환하는 것입니다.Timestamp
. 클래스가 최종 단계가 아니기 때문에 구현이 타임스탬프를 망쳤을 가능성이 높습니다.compare
언급URL : https://stackoverflow.com/questions/2321359/java-util-timestamp-after-wrong-when-comparing-milliseconds
'programing' 카테고리의 다른 글
만료일이 없는 자바스크립트 쿠키 (0) | 2023.09.23 |
---|---|
MSYS 'bash'로 인해 ^C를 트랩하는 프로세스가 파괴되지 않도록 방지 (0) | 2023.09.23 |
레이어 코너 Radius를 하단 왼쪽, 하단 오른쪽 및 상단 왼쪽 코너에만 설정하는 방법은 무엇입니까? (0) | 2023.09.23 |
카트 및 체크아웃 페이지 우커머스에서 주문 합계를 제거하는 방법 (0) | 2023.09.23 |
mariadb-client-core-10.5 : 종속: libreadline5(> = 5.2)이지만 설치할 수 없습니다. (0) | 2023.09.23 |