繁体   English   中英

如何正确比较两个日期?

[英]How should I properly compare two dates?

在执行此简单任务时遇到一些麻烦。

基本上我想比较两个日期(旧日期和新日期)。 我想知道较旧的日期是否超过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,当前它将返回负数。 我需要找出旧日期是否恰好是新Date()之前的6个月零4天。 我正在考虑使用两者的绝对值,但今天无法接受。

编辑:我知道乔达,但我不能使用它。 我必须使用Java JDK。 编辑2:我将尝试列出的方法,如果全部失败,我将使用Joda。

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 
}

我能想到的最好方法是使用Joda-Time库 来自他们网站的示例:

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*/);

遗憾的是,由我自己来添加不可避免的“使用JodaTime”答案。

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

Date yourReferenceDate = // get date from somewhere
int months = Months.monthsBetween(
                       new DateTime(yourReferenceDate),
                       DateTime.now()
             ).getMonths();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM