programing

자바 util타임스탬프.밀리초를 비교할 때 다음()이 잘못되었습니까?

closeapi 2023. 9. 23. 22:44
반응형

자바 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

반응형