2011-05-05 4 views
6

나는 내가 생각했던 다음자바 시간 비교가 실패하는 이유는 무엇입니까?

Date d1 = lib.convertTime("10:30:53.39"); 
    Date d2 = lib.convertTime("10:30:53.4"); 
    System.out.println(d1.after(d2)); 

사실 같은 반환했을 것이다 그러나

을 예상대로 밀리 초 단위로 날짜 거짓

public Date convertTime(String time) { 

    SimpleDateFormat parser = new SimpleDateFormat("HH:mm:ss.S"); 
    try { 
     return parser.parse(time); 
    } 
    catch (Exception ex) { 
     ex.printStackTrace(); 
     return null; 
    } 


} 

    Date d1 = lib.convertTime("10:30:53.39"); 
    Date d2 = lib.convertTime("10:30:53.40"); 
    System.out.println(d1.after(d2)); 

수익을 문자열로 변환하려면 다음 방법을 . 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

6

혼란이 기간이 바로 분석 토큰 분리하지 수치 소수점 분리되어 있기 때문이다이다. 예를 들어 :으로 기호를 바꾸면 그 차이가 분명 해집니다.

즉, .이 소수 구분 기호 인 로케일의 경우 숫자로 1.5 = 1.50 = 1.500입니다. 우리는 문자열을 해석 할 때에

그러나 "1.5"는 토큰으로 세퍼레이터를 사용 ."1.50", "1.500", 우리는 (1, 5), (1, 50), (1, 500)을 얻는다. .에는 여기에 특별한 수학적 의미가 없으며, 예를 들어 하나의 공백이 될 수도 있습니다.

SimpleDateFormat parser = new SimpleDateFormat("Z s#S"); 

    System.out.println(parser.parse("GMT 1#002").getTime()); // 1002 
    System.out.println(parser.parse("GMT 1#02").getTime()); // 1002 
    System.out.println(parser.parse("GMT 1#2").getTime()); // 1002 
    System.out.println(parser.parse("GMT 1#20").getTime()); // 1020 
    System.out.println(parser.parse("GMT 1#200").getTime()); // 1200 
:

이 간단한 조각은 또한 점을 보여줍니다

4

마지막 값은 밀리 .. 39 이상인 제 40 초과 39

관련 문제