【问题标题】:How should I properly compare two dates?我应该如何正确比较两个日期?
【发布时间】:2013-04-17 15:16:39
【问题描述】:

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

基本上我想比较两个日期(一些较旧的日期与新的日期)。我想知道较早的日期是否超过 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。

【问题讨论】:

  • 你肯定要比较绝对日期。
  • @user2266098 with month 我认为使用 abs() 可以,但是那一天呢,不同的月份有不同的天数:(
  • 如果较早的日期是 21 日,而今天是 17 日,则计算 17 减去 21。您认为这是正数吗?
  • 我认为您需要两个日期的月和日差异。看看JodaTime:joda-time.sourceforge.net/faq.html#datediff

标签: java date-comparison


【解决方案1】:

JDK dates 有 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 
}

【讨论】:

  • 这个功能我知道,问题是我需要知道旧日期是否是 6months+4days 前(确切)...
  • @JoeChen 请在您的问题中说明。
  • 我已更改答案以反映陈先生的评论
  • @hd1 奇怪的是,Calendar.DAY 不存在!?
  • 我个人会为此使用 joda,但应该是 DATE,会更新
【解决方案2】:

我能想到的最好方法是使用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*/);

【讨论】:

  • 我自己会使用 joda,但 OP 似乎想要 JDK Date 类。
  • @hd1 我没有看到任何证据表明 OP 甚至知道 jodatime
【解决方案3】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多