比较日历对象

Comparing calendar objects

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

问题是你设置日历月份的方式不对,如果你要手动设置字段,你应该使用日历常量或了解内部工作原理。

您将 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");
    }