如何在java中比较年、月和日?

如何在java中比较年、月和日?,java,Java,在我的应用程序中,我想对MyDate类进行排序,所以,我的老师告诉我如何排序,但我如何才能先比较年份,然后比较其他年份 Comparator<MyDate > dateCompare = new Comparator<MyDate >() { @Override public int compare(MyDate o1, MyDate o2) { int dd1 = o1.getD

在我的应用程序中,我想对MyDate类进行排序,所以,我的老师告诉我如何排序,但我如何才能先比较年份,然后比较其他年份

    Comparator<MyDate > dateCompare = new Comparator<MyDate >() {

            @Override
            public int compare(MyDate o1, MyDate o2) {

                int dd1 = o1.getDateDay();
                int mm1 = o1.getDateMonth();
//////years to compare ???????????????????
                int years1 = o1.getYear();

                int dd2 = o2.getDateDay();
                int mm2 = o2.getDateMonth();
//////years to compare ?????????????????
                 int years2 = o2.getYear();

                if (mm1 > mm2) {
                    return 1;
                } else if (mm1 < mm2) {
                    return -1;
                } else { // ==

                    if (dd1 > dd2) {
                        return 1;
                    } else if (dd1 < dd2) {
                        return -1;
                    } else {
                        return 0;
                    }
                }
            }
        }; 


    Collections.sort(list,dateCompare); 

首先比较最重要的字段。日期是年。 此外,由于if和elseif条件返回,因此不需要后续else。差不多

if (years1 > years2) {
  return 1;
} else if (years1 < years2) {
  return -1;
}
if (mm1 > mm2) {
  return 1;
} else if (mm1 < mm2) {
  return -1;
}
if (dd1 > dd2) {
  return 1;
} else if (dd1 < dd2) {
  return -1;
}
return 0;

您可以使用日期对象的before方法来比较日期,这将使编写任务代码变得非常简单。当然,这意味着您必须将MyDate对象转换为Date,但这应该非常简单。

您可以使用GregorianCalendar类的内置功能在一行中完成此操作

return new GregorianCalendar(years1, mm1 - 1, dd1).compareTo(new GregorianCalendar(years2, mm2 - 1, dd2));

请注意,月份参数中的-1是必需的,因为GregorianCalendar构造函数使用的月份值范围为0到11。

Thank's我应该在条件之上复制此代码?如果这是您的意思,我将这样编写compare。但是qeustion中的代码工作正常!这是因为我是java新手,我有一个非常糟糕的老师:你非常帮助我,非常感谢!问题中的代码没有比较年份。是的,哎呀!不要向任何人展示java.util.Date和.Calendar类的编程新手。这种混乱将扼杀所有人对编程的兴趣。不幸的是,任何新程序员最终都会在现有程序中遇到这些类。在这个特殊的例子中,格雷戈里安·卡伦达做的正是所需要的;我应该询问OP是否使用Java8,并使用Java.time.LocalDate给出类似的答案。