Java 如何检查日期是否早于特定时间?
我必须检查日期变量是否在特定时间之前。变量的格式为dd.MM.yyyy HH:MM:ss 让我们以今天的日期2016年10月31日15:20:45为例。变量的值为30.10.2016 14:00:21。现在如何检查变量是否比今天早一天,以及时间是否早于或等于23:00 我尝试了以下代码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,
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。