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