【问题标题】:How to check whether a date is more than 30 days old? [duplicate]如何检查日期是否超过 30 天? [复制]
【发布时间】:2016-06-02 20:11:35
【问题描述】:

我有一个java.util.Date,我需要检查它是否超过 30 天。最好的检查方法是什么?

for(Date date: listOfDates) {
  // how to check this date to see whether it is more than 30 days limit
  if(checkDateLimit()) {

  }
}

我使用的是 Java 7。

【问题讨论】:

  • 您可以使用 this 之类的方法计算过去 30 天的日期,然后确定指定日期是在它之前还是之后
  • getTime() 将帮助您以很少的计算来比较日期。
  • @david 发帖前请搜索 Stack Overflow。

标签: java date jodatime


【解决方案1】:

这取决于您对“30 天”的定义的正式程度。如果您只想知道给定日期(在 Java 中包括精确到毫秒的时间)是否是 30 天(精确到毫秒),那么您可以计算 30 天内有多少毫秒并查看当前日期比给定日期大的毫秒数。

日期通过 getTime() 显示其毫秒值。

private boolean olderThan30Days(Date givenDate)
{
  long currentMillis = new Date().getTime();
  long millisIn30Days = 30 * 24 * 60 * 60 * 1000;
  boolean result = givenDate.getTime() < (currentMillis - millisIn30Days);
  return result;
}

【讨论】:

  • 只需删除第 5 行给定日期的括号。变量不需要那个。不过对我来说看起来不错。
  • 哎呀。谢谢。已编辑。
  • 顺便说一句,我的日期格式是这样的Thu Jun 02 12:43:44 PDT 2016。而且我没有看到这个方法getTimeInMillis()?
  • 我会使用System.currentTimeMillis() 而不是new Date().getTimeInMillis()。
  • 无论如何,如果从另一个中减去一个 long 并将结果与​​第三个进行比较会使您感到困惑,那么请引入一个新的库来做到这一点。
【解决方案2】:

如果你可以使用 Java 8,你可以这样做:

boolean checkDateLimit(Date date) {
    // convert Date into Java 8 LocalDate
    LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
    LocalDate today = LocalDate.now();
    // count number of days between the given date and today
    long days = ChronoUnit.DAYS.between(localDate, today);
    return days > 30;
}

【讨论】:

  • 仍然在 Java 7 上。:(
  • @david 那就用JodaTime吧,很像
  • 对,Java 8 日期/时间 API 几乎基于 JodaTime,所以如果您可以使用 JodaTime,结果应该非常相似。
  • @earangol 如果可能的话,你能提供一个 JodaTime 的例子吗?
【解决方案3】:

根据其他人的建议,您应该使用 JodaTime:

  private static boolean olderThan30Days(Date givenDate) {
    boolean result =
        Days.daysBetween(new DateTime(givenDate), new DateTime()).isGreaterThan(Days.days(30));
    return result;
  }

【讨论】:

    猜你喜欢
    • 2011-10-31
    • 2015-07-24
    • 1970-01-01
    • 2011-12-26
    • 2011-09-03
    • 2010-10-06
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    相关资源
    最近更新 更多