2012-11-18 7 views
1

두 데이터 유형을 비교할 때 몇 가지 문제점을 발견했습니다. 변수 -> java.sql.Date 유형.자바에서 두 날짜 유형을 비교하십시오

첫째로 내가 createing하고있어 현재의 데이터 (yyyy-mm-dd)이 :

java.util.Date date = new java.util.Date(); 

java.sql.Date dateSql = new Date(date.getTime()); 

Secoundly, MySQL의에서 메신저 데이터를 수신 : 다음

MyDataEntity myDataEntity = session.getNamedQuery(MyDataEntity.GET_ELEMENT).uniqueResult(); 

내가 두 날짜를 비교하기 위해 노력하고있어를 :

if(dataSql != myDataEntity.getDate()){ 
System.out.println("different"); 
}else{ 
System.out.println("these same"); 
} 

효과는 항상이 두 날짜가 다릅니다. 나는이 두 datas의 값을 인쇄하고있을 때, 나는이 같은 값을 가지고 :

System.out.println(dataSql); 
System.out.println(myDataEntity.getDate); 

효과 :

2012-11-16 
2012-11-16 

그러나, 내가 하나가 문제를 발견

내가 할 경우 :

long date1 = dateSql.getTime(); // print 1353106800000 
long date2 = myDataEntity.getDate().getTime(); // print 1353234605091 

어떻게 두 날짜 (yyyy-mm-dd)를 비교합니까? 그들은 힙에 동일한 개체 경우 오히려 자신의 가치보다, 즉 - 자신의 JVM ID를 ==을 비교하여 someDate.equals(anotherDate)

-

답변

2

먼저, 비 원시 객체를 비교하는 .equals(..)를 사용합니다.

그런 다음 올바른 일을 비교하십시오. 동일한 날짜를 원하면 시간, 분 및 일을 버려야합니다. 이를 위해 다음을 사용할 수 있습니다

  • 수학을 밀리 초가에게
  • java.util.Calendar.set(..) 방법을 뺄 수 있습니다.
  • joda 시간 DateMidnight - 최선의 선택
0

이것은 잘 알려진 문제 : java.sql.Date은 (마지막에 모든 제로를 볼 날짜 개체의 하단에있는 정밀도를 제거 객체). 따라서 java.util.Date와 java.sql.Date 사이의 정밀도를 표준화해야합니다.

java.util.Date utilDate = new java.util.Date(); 
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); 

아, 그리고 ==가 아닌 개체를 비교할 때 .equals를 사용하십시오.

관련 문제