2011-05-05 35 views
6

düşündüğümden aşağıdakiJava zaman karşılaştırmam neden başarısız oluyor?

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

gerçek aynı döner olurdu Ancak

beklendiği gibi milisaniye boyu ile bugüne kadar yanlış

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

döner dize dönüştürmek için aşağıdaki yöntemi var . Neyi yanlış yapıyorum?

cevap

6

karışıklık dönemi sadece ayrıştırma belirteç ayırıcı değil, bir sayısal ondalık ayırıcı olmasından kaynaklanmaktadır olmasıdır. Sembolü : ile değiştirin ve fark daha nettir. Bu, .'un ondalık ayırıcı olduğu yerlerin içinde, 1.5 = 1.50 = 1.500 nümerik olarak, yani, Biz dizeleri ayrıştırmak zaman

Ancak "1.5", bir belirteç ayırıcı olarak . kullanılarak "1.50", "1.500", biz (1, 5), (1, 50), (1, 500) olsun. .'un burada özel bir matematiksel anlamı yoktur ve sadece tek bir boşluk olabilir.

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 
:

Bu basit pasajı da noktayı gösteriyor

4

son değer milisaniye .. 39 den büyük 4. 40 den büyük 39.

İlgili konular