Getting wrong number of days using JodaTime

I am getting the wrong number of days when finding the difference between two sql dates. The following shows the method:

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

Suppose

BookArrivalDate is 2013-10-01 00:00:00

and

BookDepartureDate is 2013-10-14 00:00:00

I get 4748 as the difference.

Jon Skeet
people
quotationmark

This is the problem:

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

Look at your format in terms of the order of day, month and year - then look at your data. I believe you want:

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

(I'd also encourage you to use the Joda Time formatting classes instead...)

people

See more on this question at Stackoverflow