【问题标题】:How can I check if date is before a specific time?如何检查日期是否早于特定时间?
【发布时间】:2017-03-13 15:51:42
【问题描述】:

我必须检查日期变量是否在特定时间之前。该变量的格式为 dd.MM.yyyy HH:mm:ss。

让我们以今天的日期 31.10.2016 15:20:45 为例。变量的值为 30.10.2016 14:00:21。我现在如何检查变量是否比今天早一天以及时间是否早于或等于 23:00?

我尝试了以下代码。

Date today = new Date(); 
Calendar c = Calendar.getInstance(); 
c.setTime(causedAt); 
c.add(Calendar.DATE, 1); 
if (c.getTime().compareTo(today) < 0) { // It's more than 1 day.
    setOneDayOverdue(true); 
    setFiveDaysOverdue(false); 
}

但是使用此代码,缺少时间的部分。

该解决方案应适用于 Java 7,并且无需任何外部库(如 Joda-Time)。

【问题讨论】:

  • 有很多方法可以做到这一点。你试过什么?我建议使用 SimpleDataFormat 将您的日期字符串解析为 Date 对象。然后您可以使用 compareTo() 方法将其与今天的日期进行比较。
  • @jgitter 我尝试了以下代码。今天的日期 = new Date();日历 c = Calendar.getInstance(); c.setTime(causedAt); c.add(日历.DATE, 1); if (c.getTime().compareTo(today)
  • 最好用这些信息更新问题。
  • “时间部分丢失”是什么意思? Java 日期对象只是从纪元开始的长毫秒的包装器,因此您的时间值包含在其中。你想完成什么?

标签: java date


【解决方案1】:

所以我得到了以下适用于我的代码:

public void setOverdueFlagIfRequired(Date today, Date causedAtDate) {       
    Calendar now = Calendar.getInstance();
    now.setTime(today);

    Calendar causedAt = Calendar.getInstance();
    causedAt.setTime(causedAtDate);

    Calendar yesterday2300 = Calendar.getInstance();
    yesterday2300.setTime(today);
    yesterday2300.add(Calendar.DATE, -1);
    yesterday2300.set(Calendar.HOUR_OF_DAY, 23);
    yesterday2300.set(Calendar.MINUTE, 0);
    yesterday2300.set(Calendar.SECOND, 0);
    yesterday2300.set(Calendar.MILLISECOND, 0);

    Calendar fiveDaysBack2300 = Calendar.getInstance();
    fiveDaysBack2300.setTime(yesterday2300.getTime());      
    fiveDaysBack2300.add(Calendar.DATE, -4);

    if (causedAt.compareTo(fiveDaysBack2300)<=0) {
        setFiveDaysOverdue(true);
    }
    else if (causedAt.compareTo(yesterday2300)<=0 && causedAt.compareTo(fiveDaysBack2300)>0) {
        setOneDayOverdue(true);
    }
}

【讨论】:

    【解决方案2】:

    您应该使用新的 Java 8 日期/时间 API:

    LocalDateTime NOW = LocalDateTime.now(); // e.g. 31.10.2016 15:20:45
    
    // parse given Date/Time 
    LocalDateTime input = LocalDateTime.parse(strInput, DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss"));
    
    // Check if input is before "now"
    boolean isBefore = input.isBefore(NOW);
    

    请参阅https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html 以获取满足您要求所需的所有方法。例如:

    LocalDateTime yesterday = NOW.minusDays(1);
    boolean isBeforeYesterday = input.isBefore(yesterday);
    

    使用getHour()getMinute(),您可以检查

    【讨论】:

    • 很遗憾我不能使用 Java 8,在我们的项目中我们使用的是 Java 7
    • @deki08 在 ThreeTen-Backport 项目中,大部分 java.time 功能都向后移植到 Java 6 和 7。在 ThreeTenABP 项目中进一步适配 Android。
    猜你喜欢
    • 2018-04-05
    • 1970-01-01
    • 2014-08-26
    • 2021-12-18
    • 2013-05-12
    • 2015-01-04
    • 2011-03-05
    • 2012-05-27
    • 1970-01-01
    相关资源
    最近更新 更多