[英]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.