6 votes

Pourquoi ma comparaison de temps java échoue-t-elle ?

J'ai la méthode suivante pour convertir une chaîne en date avec une granularité en millisecondes.

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

renvoie faux comme prévu

Toutefois, les points suivants

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

Ce qui, à mon avis, aurait été le même retour à la réalité. Qu'est-ce que je fais de mal ?

6voto

polygenelubricants Points 136838

La confusion est due au fait que le point n'est qu'un séparateur de jetons d'analyse, et non un séparateur décimal numérique. Remplacez le symbole par, par exemple, : et la différence est plus nette.

C'est-à-dire, dans les endroits où . est le séparateur décimal, numériquement 1.5 = 1.50 = 1.500 .

Cependant, lorsque nous analysons les chaînes de caractères "1.5" , "1.50" , "1.500" en utilisant . comme séparateur de jetons, on obtient (1, 5) , (1, 50) , (1, 500) . Le site . n'a pas de signification mathématique particulière ici, et il pourrait tout aussi bien être, disons, un simple espace.

Ce simple extrait démontre également ce point :

    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

4voto

Kal Points 14230

La dernière valeur est en millisecondes 39 est supérieur à 4. 40 est supérieur à 39.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X