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

ご存知のように、MMMonthの形式であり、はminutesmmの形式であるため、適切な結果が得られます。

于 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 を読むと、このメソッドでは月がゼロベース (1 月は 0) であることがわかります。例えば:

  • 2013 年 1 月 1 日 - 2013 年 2 月 1 日
  • 2013 年 12 月 31 日 - 2014 年 1 月 31 日 (1 年は 12 か月のみ)
  • 2013 年 1 月 31 日 - 2013 年 3 月 3 日 (2 月は 28 日のみ)

これを行うことができます:

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

または(私の好み)これ:

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

さらに、@PermGenError によって指摘された問題を解決する必要があります。

于 2013-07-08T14:08:11.050 に答える