2011-05-05 69 views
6

我有以下方法字符串轉換成日期毫秒粒度爲什麼我的java時間比較失敗?

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)); 

返回false預期

但是以下

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

我本以爲這是一樣返回true 。我究竟做錯了什麼?

回答

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大於4。40大於39