-1

我正在尝试获取客户的进入和退出日期,看看它们是否有效。但是每次我运行程序时都会将随机天数添加到月份中。例如,当我输入 03 后,月份可以是 43。你能告诉我为什么吗?

public void makeNewReservation() throws ParseException {

        // Enter informations
        boolean error=true;
        boolean dateOK=false;
        String date_sortiee="";
        String date_entree="";
        Scanner in=new Scanner(System.in);


        while(error){
            //take date of checkin and checkout and verify if they are OK

            System.out.println("Single room selected ? dd/MM/yyyy");
            System.out.println("Date de Entree?");
            in=new Scanner(System.in);

        //  date_entree = in.next();    

            System.out.println("Date de Entree? dd/MM/yyyy");
            date_entree = in.next();
            String[] test = date_entree.split("/");
            int day = Integer.parseInt(test[0]);
            int Month = Integer.parseInt(test[1]);

            int year = Integer.parseInt(test[2]);
            DateFormat format = new SimpleDateFormat("dd/MM/yyyy");
            GregorianCalendar checkin= new GregorianCalendar();
            checkin.set(year, Month, day);

            System.out.println("Date de Sortie? dd/MM/yyyy");
            date_sortiee = in.next();
            String[] test1 = date_sortiee.split("/");
            int day1 = Integer.parseInt(test[0]);
            int Month1 = Integer.parseInt(test[1]);
            int year1 = Integer.parseInt(test[2]);
            DateFormat format1 = new SimpleDateFormat("dd/MM/yyyy");
            GregorianCalendar checkout= new GregorianCalendar();
            //System.out.println(format.format(checkin));
            checkout.set(year1, Month1, day1);


            checkdate(checkin,checkout);


            dateOK= checkdate(checkin, checkout);
            if (dateOK){
                error=false;
            }
            else{
                error=true;
            }
        }


public boolean checkdate(GregorianCalendar in,GregorianCalendar out){
    DateFormat format = new SimpleDateFormat("dd/mm/yyyy");
    GregorianCalendar today = new GregorianCalendar();
    System.out.println(format.format(in.getTime()));
    boolean test=false;
    if(in.before(out)&&in.after(today)|| in.before(out)&& in.equals(today)){
        System.out.println("puck u");
        test= true;

    }
    return test;
4

3 回答 3

4

在 checkDate 方法中改变这个

DateFormat format = new SimpleDateFormat("dd/mm/yyyy");

DateFormat format = new SimpleDateFormat("dd/MM/yyyy");

如您所知,MMis format for Monthmmis format for minutes,因此您会得到适当的结果。

于 2013-02-13T18:48:16.527 回答
0
public boolean checkIfDateEntreeisok(Date date_entree, Date date_sortiee) throws ParseException{
    boolean dateOK=false;

    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

    Date todaysDate = new Date();
    if((date_entree.after(todaysDate)) || (date_entree.equals(todaysDate))) {
        System.out.println("first step");
        if ((date_entree.before(date_sortiee)) || (date_sortiee.equals(date_entree))) {
            System.out.println("second step");

            dateOK=true;
        }

    }

    else{
        System.out.println("les dates sont trop anciennes , veuillez les ressaisir");
    }
    return  dateOK;
}
于 2013-02-13T22:15:47.170 回答
0

查看Calendar.set(year, month, date)的javadoc

您正在有效地执行以下操作来解析日期:

int day = Integer.parseInt(test[0]);
int month = Integer.parseInt(test[1]);
int year = Integer.parseInt(test[2]);
GregorianCalendar checkin= new GregorianCalendar();
checkin.set(year, month, day);

(月份不应以大写字母开头)

...如果您阅读了 javadoc,那么您会看到基于此方法的月份为零(一月为 0),所以对您来说事情会有点奇怪。例如:

  • 2013 年 1 月 1 日 - 2013 年 2 月 1 日
  • 2013 年 12 月 31 日 - 2014 年 1 月 31 日(一年只有 12 个月)
  • 31/1/2013 - 2013 年 3 月 3 日(2 月只有 28 天)

您可以这样做:

checkin.set(year, month-1, day);

或(我的偏好)这个:

checkin.setTime(format.parse(date_entree));

此外,您应该解决@PermGenError 指出的问题

于 2013-07-08T14:08:11.050 回答