2009-04-14 6 views
3

Je n'arrive pas à voir le problème avec l'exemple de code ci-dessous. Pour une raison quelconque semble ignorer l'année et dire que les dates sont les mêmes, comme on peut le voir dans la sortie ci-dessous. Je dois manquer quelque chose de simple.Problème de conversion de chaîne java en datetime

01/28/2006
01/16/2007
Mar 1 avril 2008 00:00:00 PDT
Mar 1 avril 2008 00:00:00 PDT
fait

import java.util.*; 
import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 

    class ExampleProgram { 
     public static void main(String[] args){ 
     DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); 
     String d1String = "01/28/2006"; 
     String d2String = "01/16/2007"; 
     System.out.println(d1String); 
     System.out.println(d2String); 
     Date d1=null; 
     try { 
      d1 = df.parse(d1String); 
     } catch (ParseException e) {     
      System.out.println(e.getMessage()); 
     }   
     Date d2=null; 
     try { 
      d2 = df.parse(d2String); 
     } catch (ParseException e) {     
      System.out.println(e.getMessage()); 
     } 
     System.out.println(d1); 
     System.out.println(d2); 
     System.out.println("done"); 
     } 
    } 
+0

Un poisson d'avril blague? Il semble juste très artificiel que les dates correspondent tous les deux au 1er avril. + 1 an, -12 mois == même date. Si votre objet dateformat est strict (df.setLenient (false)), l'erreur est générée pour vous. – evnafets

Répondre

6
"dd/MM/yyyy" 

devrait lire:

"MM/dd/yyyy" 
+0

Comment ai-je raté ça .... merci !! –

0

Vous pourriez essayer de déclarer vos dates comme Date objets.

+1

Il l'a fait. Le constructeur Date (String) est obsolète. Il utilise la bonne façon de convertir une chaîne en une date. –

1

La raison pour laquelle il n'a pas été de vous donner ce que vous attendiez est comme Pierre le dit SimpleDateFormat devrait lire "MM/dd/yyyy"

La raison pour laquelle le résultat dit qu'ils semblent être égaux parce que le format que vous avez donné il "dd/MM/yyyy", d1String est le mois 28. Il prend 28 - 12, en ajoutant une année, 16 - 12, en ajoutant une autre année, et le résultat est 4 (avril) et l'année est maintenant 2008. Même chose pour d2String.