2012-10-13 2 views
5

Date 속성이있는 간단한 엔티티 클래스가 있습니다. 이 속성은 MySQL datetime 열에 해당합니다.데이터베이스의 지속 날짜가 검색된 날짜와 같지 않음

java.util.Date now = new java.util.Date(); 
Entity entity = new Entity(); 
entity.setStartDate(now); 
entityService.save(entity); // save entity to database 
entity = entityService.get(entity.getId()); // get entity back from database 
Assert.assertEquals(entity.getStartDate(), now); 

내가 그 두 날짜가 같은 것으로 기대하지만, 그렇지 않은 :

@Entity 
public class Entity { 

    @Column(name = "start_date") 
    @Temporal(TemporalType.TIMESTAMP) 
    private java.util.Date startDate; 

} 

이 제품은 통합 테스트는 내가 좋아하는 외모를 쓴 것입니다! 실제로, 나는 가지고있다 :

now.getTime() = 1350160029831 
entity.getStartDate().getTime() = 1350160029000 

그래서 2 개의 날짜 사이에는 작은 간격이있다. 나는이 격차가 어디서 올 수 있었는지 정말로 궁금해합니다. 항상 같은 것은 아니며 테스트 프로세스를 시작할 때마다 다릅니다. 내 데이터베이스에 저장된 날짜는 2012-10-13 22 : 15 : 38.0입니다.

어딘가에 밀리 초를 정리해야합니까? MySQL documentation 가입일

답변

3

는 :

날짜 시간 또는 타임 스탬프의 값은 최대 마이크로 초 (6 자리) 정밀도의 후단 부분 초 부분을 포함 할 수있다. 이 소수 부분이 인식 되더라도 DATETIME 또는 TIMESTAMP 열에 저장된 값에서 삭제됩니다. MySQL에서 분수 초에 대한 정보는 11.1.5.6 절, " 시간 값의 분수 초"를 참조하십시오. 당신은 사용하지 말아야

주, 어쨌든 날짜를 비교하기 위해 동일 다양한 날짜 서브 클래스는 a.equals(b) && !b.equals(a) 등의 문제가 발생할 버그가 구현해야하기 때문에 :

java.util.Date d1 = java.sql.Date.valueOf("2012-01-01"); 
java.util.Date d2 = new java.util.Date(d1.getTime()); 
java.util.Date d3 = new java.sql.Timestamp(d1.getTime()); 

System.out.println(d1.equals(d2)); // true 
System.out.println(d2.equals(d1)); // true 
System.out.println(d1.equals(d3)); // true 
System.out.println(d3.equals(d1)); // false 
System.out.println(d2.equals(d3)); // true 
System.out.println(d3.equals(d2)); // false 
+0

그래서 내가 밀리 초 부분을 제거 검정 고시한다을 이런 식으로 : Calendar calendar = Calendar.getInstance(); calendar.setTime (date); calendar.set (Calendar.MILLISECOND, 0); – Tunaki

관련 문제