阳历自动添加到月

时间:2013-02-13 18:46:12

标签: java

我正在尝试获取客户入口和退出日期,看看它们是否有效。 但每次运行程序时,随机天数都会添加到月份。例如,在我进入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;

3 个答案:

答案 0 :(得分:4)

在checkDate方法中更改此

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

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

如您所知,MM的格式,mm分钟的格式,因此您可以获得适当的结果。< / p>

答案 1 :(得分: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;
}

答案 2 :(得分:0)

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

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

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);

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

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

  • 2013年1月1日 - 将于2013年2月1日
  • 2013年12月31日 - 将于2014年1月31日(一年仅12个月)
  • 2013年1月31日 - 将于2013年3月3日(仅限28天)

你可以这样做:

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

或(我的偏好)这个:

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

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