我在比较2个日历对象时遇到了一些麻烦。这是我的代码:
String date = "06/19/2015";
Calendar c = Calendar.getInstance();
String days="", months="", years="";
Scanner sc = new Scanner(date);
sc.useDelimiter("/");
while(sc.hasNext()){
months = sc.next();
days = sc.next();
years = sc.next();
}
int day = Integer.parseInt(days);
int month = Integer.parseInt(months);
int year = Integer.parseInt(years);
System.out.println(day+" "+month+" "+year);
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, day);
cal.set(Calendar.MONTH, month);
cal.set(Calendar.YEAR, year);
if(c.before(cal)){
System.out.println("Victory!");
}
sc.close();
它应该将今天的日期与字符串中的日期进行比较并打印出“Vicotry!”。问题是,它总是打印出来,即使它不应该......有人可以帮助我吗?
答案 0 :(得分:1)
问题是您以错误的方式设置日历月,您应该使用日历常量,或者如果您要手动设置字段,请注意内部工作。
你将june视为整数值6,但是callendar的月份被索引为0到11,因此Calendar.JUNE将是5而不是6.您的手动日期解析解决方案将Calendar cal
的月份设置为7月( Calendar.JULY
是6)
<小时/> 我建议采用更清晰的方法,用
DateFormat
解析日期。您并没有真正使用Calendar
来获取当前日期。最好使用new Date()
代替Calendar.getInstance()
。
如果您确实要处理日期字段,可以使用calendarObj.setTime(dateObject)
。
String dateString = "06/19/2015";
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
Calendar c = Calendar.getInstance();
try {
Date date1 = sdf.parse(dateString);
//makes sense using calendar only if you want to process the date fields
//otherwise use if (new Date().before(date1)){...}
if (c.getTime().before(date1)) {
System.out.println("Victory!");
};
date1.getTime();
} catch (ParseException e) {
System.out.println("Invalid date format");
}