比较日历对象

时间:2015-06-18 15:13:46

标签: java calendar compare

我在比较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!”。问题是,它总是打印出来,即使它不应该......有人可以帮助我吗?

1 个答案:

答案 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");
    }