我正在尝试获取客户入口和退出日期,看看它们是否有效。 但每次运行程序时,随机天数都会添加到月份。例如,在我进入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;
答案 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:
你可以这样做:
checkin.set(year, month-1, day);
或(我的偏好)这个:
checkin.setTime(format.parse(date_entree));
此外,您应该解决@PermGenError指出的issue