0

在查找两个 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 作为差异。

4

2 回答 2

2

这就是问题:

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

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

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

(我也鼓励你改用 Joda Time 格式化类......)

于 2013-10-08T15:01:54.743 回答
1

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

这将产生大约 13 年的差异——大约是你休假的天数。

于 2013-10-08T15:03:17.670 回答