0

在执行这个简单的任务时遇到了一些麻烦。

基本上我想比较两个日期(一些旧日期与新日期)。我想知道较旧的日期是否超过 x 个月和 y 天。

int monthDiff = new Date().getMonth() - detail.getCdLastUpdate().getMonth();
int dayDiff = new Date().getDay() - detail.getCdLastUpdate().getMonth();
System.out.println("\tthe last update date and new date month diff is --> " + monthDiff);
System.out.println("\tthe last update date and new date day diff is --> " + dayDiff);

如果较早的日期是 2012-09-21 00:00:00.0,目前它将返回负数。我需要确定旧日期是否正好在新日期()之前 6 个月零 4 天。我正在考虑使用两者的绝对值,但今天不能动脑筋。

编辑:我知道 joda,但我不能使用它。我必须使用 Java JDK。编辑 2:我会尝试列出的方法,如果都失败了,我会使用 Joda。

4

3 回答 3

6

JDK 日期有 before 和 after 方法,返回布尔值,以完成您的任务:

Date now = new Date();
Calendar compareTo = Calendar.getInstance();
compareTo.add(Calendar.MONTH, -6);
compareTo.add(Calendar.DATE, -4);
if (compareTo.getTime().before(now)) {
   // after
} else {
   // before or equal 
}
于 2013-04-17T15:19:43.173 回答
5

我能想到的最好方法是使用Joda-Time library。他们网站上的例子:

Days d = Days.daysBetween(startDate, endDate);
int days = d.getDays();

或月数:

Months m = Months.monthsBetween(startDate, endDate)
int months = m.getMonths();

在哪里:

DateTime startDate =  new DateTime(/*jdk Date*/);
DateTime endDate =  new DateTime(/*jdk Date*/);
于 2013-04-17T15:23:42.897 回答
3

叹息,由我来添加不可避免的“使用 JodaTime”答案。

JodaTime为您提供所有重要时间距离的特定数据类型。

Date yourReferenceDate = // get date from somewhere
int months = Months.monthsBetween(
                       new DateTime(yourReferenceDate),
                       DateTime.now()
             ).getMonths();
于 2013-04-17T15:24:28.617 回答