2013-10-08 4 views
0

Je me trompe de nombre de jours lorsque je trouve la différence entre deux dates sql. Le tableau suivant montre la méthode:Se tromper de nombre de jours en utilisant JodaTime

public Vector getAvailRoom(String RoomID) 
{ 
      formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); 
      Date dateA = null; 
      Date dateD = null; 

    Vector vect = new Vector(); 
    try 
    { 

     psmt=con.prepareStatement("select * from Booking where RmID="+RoomID); 

     rs=psmt.executeQuery(); 

     while(rs.next()) 
     { 
         AvailDetails2 avaDet = new AvailDetails2(); 

         avaDet.BookArrivalDate = rs.getString("BookArrivalDate"); 
         avaDet.BookDepartureDate = rs.getString("BookDepartureDate"); 
         System.out.println(""+avaDet.BookArrivalDate); 
         System.out.println(""+avaDet.BookDepartureDate); 

         try 
         { 
          dateA = (Date) formatter.parse(avaDet.BookArrivalDate); 
          dateD = (Date) formatter.parse(avaDet.BookDepartureDate); 

          DateTime datetimeA = new DateTime(dateA); 
          DateTime datetimeD = new DateTime(dateD); 

          diffDays = Days.daysBetween(datetimeA.toLocalDate(), datetimeD.toLocalDate()).getDays(); 
          System.out.println(""+diffDays); 
          avaDet.BookDiffDays = Integer.toString(diffDays); 
         } 
         catch (Exception egetAvailRoom) 
         { 
          egetAvailRoom.printStackTrace(); 
         } 

         vect.add(avaDet); 
     }  
    } 
    catch (Exception e3) 
    { 

    } 
    return vect;  
}//end getAvailRoom 

On suppose

BookArrivalDate est 2013-10-01 00:00:00

et

BookDepartureDate est 2013-10-14 00:00:00

je reçois 4748 comme la différence.

+0

Veuillez formater votre code en utilisant des espaces au lieu d'onglets - c'est très difficile à lire pour le moment. –

+0

Aussi, s'il vous plaît montrer le problème dans un programme court mais * complet *. Il ne devrait pas être nécessaire d'impliquer une base de données ici - vous devriez être capable de fournir un programme que nous pouvons copier, coller et lancer pour voir le problème. –

Répondre

2

C'est le problème:

formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); 

Regardez votre format en termes de l'ordre du jour, le mois et l'année - puis regardez vos données. Je crois que vous voulez:

formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

(Je vous encourage aussi à utiliser les classes de mise en forme Joda Time à la place ...)

+0

Merci beaucoup :) –

1

J'ai remarqué que votre dateFormat est « dd-MM-aaaa HH: mm : ss ", mais vous dites vos deux dates en aaaa-MM-jj HH: mm: ss.

Cela donnerait une différence d'environ 13 ans - environ le nombre de jours où vous êtes fermé.

Questions connexes