使用JodaTime获取错误的天数

时间:2013-10-08 14:58:23

标签: java sql ms-access-2007 jodatime

在找到两个sql日期之间的差异时,我得到了错误的天数。 以下显示了该方法:

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

假设

BookArrivalDate2013-10-01 00:00:00

BookDepartureDate2013-10-14 00:00:00

我得到4748作为差异。

2 个答案:

答案 0 :(得分:2)

这是问题所在:

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

根据日,月和年的顺序查看您的格式 - 然后查看您的数据。我相信你想要:

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

(我也鼓励你使用Joda Time格式化代码......)

答案 1 :(得分:1)

我注意到你的dateFormat是“dd-MM-yyyy HH:mm:ss”,但你说的是你的两个约会日期 yyyy-MM-dd HH:mm:ss。

这会产生大约13年的差异 - 大约是你离开的天数。