Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查日期是否早于特定时间?_Java_Date - Fatal编程技术网

Java 如何检查日期是否早于特定时间?

Java 如何检查日期是否早于特定时间?,java,date,Java,Date,我必须检查日期变量是否在特定时间之前。变量的格式为dd.MM.yyyy HH:MM:ss 让我们以今天的日期2016年10月31日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,

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

让我们以今天的日期2016年10月31日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); 
}
datetoday=新日期();
Calendar c=Calendar.getInstance();
c、 设定时间(causedAt);
c、 添加(日历日期,1);
如果(c.getTime().compareTo(today)<0){//则超过1天。
SetOneDay过期(真);
setFiveDaysOverdue(假);
}
但是有了这段代码,时间的部分就不见了


该解决方案应该与Java 7一起使用,而不使用任何外部库,如Joda Time。

您应该使用新的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);
请参阅,以获得满足需求所需的所有方法。例如:

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

使用
getHour()
getMinute()
可以检查,因此我得到了以下适合我的代码:

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);
    }
}
public void setOverdueFlagIfRequired(日期今天,日期原因日期){
Calendar now=Calendar.getInstance();
现在,设定时间(今天);
Calendar causedAt=Calendar.getInstance();
causedAt.设定时间(causedAtDate);
Calendar yesterday2300=Calendar.getInstance();
昨天2300。设定时间(今天);
昨天2300.add(Calendar.DATE,-1);
昨天2300.套(日历小时,23);
昨天2300.set(日历分钟,0);
昨天2300.set(日历秒,0);
昨天2300.set(日历毫秒,0);
Calendar fiveDaysBack2300=Calendar.getInstance();
fiveDaysBack2300.setTime(昨天2300.getTime());
fiveDaysBack2300.add(Calendar.DATE,-4);

如果(causedAt.compareTo(fiveDaysBack2300))有很多方法可以做到这一点。您尝试过什么?我建议使用SimpleDataFormat将日期字符串解析为日期对象。然后您可以使用compareTo()方法将其与今天的日期进行比较。@jgitter我尝试了以下代码。date today=new date();Calendar c=Calendar.getInstance();c.setTime(causedAt);c.add(Calendar.DATE,1);if(c.getTime().compareTo(today)<0){//已经超过1天了。setonedayday过期(true);setFiveDaysOverdue(false);}但是使用这段代码,缺少时间的部分最好用这些信息更新问题。你说“缺少时间部分”是什么意思?Java date对象只是一个包装器,距离epoch只有很长的毫秒,因此您的时间值就包含在其中。您想实现什么?不幸的是,我不能使用Java 8,在我们的项目中,我们使用的是Java7@deki08在ThreeTen Backport项目中,java.time的大部分功能都被向后移植到Java6和Java7在ThreeTenABP项目中使用Android。