我是Java的新手。我正在使用两个时间戳对象dateFrom
和dateTo
。我想检查dateFrom
是否早于 45天而不是dateTo
。我使用这段代码片段进行比较
if(dateFrom.compareTo(dateTo) < 45)
{
// do the action;
}
我对代码中给出的45
感到困惑。我可以期待正确的结果吗?它会符合我的结果。
答案 0 :(得分:1)
compareTo()
返回值-1,0或1,具体取决于结果。
你想做的是
long result = dateTo.getTime() - (1000 * 60 * 60 * 24 * 45) - dateFrom.getTime();
if(result >= 0) {
System.out.println("dateFrom is 45 days or more before dateTo");
else {
System.out.println("dateFrom is less than 45 days before dateTo");
}
但这很丑陋。您是否有特定原因未使用Calendar
?
答案 1 :(得分:1)
你必须在逻辑上考虑一下。首先,您需要到达dateTo
日期前45天的时间戳。时间有各种单位(秒,分钟,小时,天),因此在这种情况下检查< 45
毫无意义。 compareTo()
方法只是用于命令知道时间戳是在另一个之前还是之后。
您可以先为时间戳创建Calendar
,然后在45天内为add() dateFrom
创建。然后,您可以使用before()方法检查dateFrom
之前是否dateTo
。
答案 2 :(得分:0)
使用Joda Time或Calendar类(添加45天到dateFrom,将结果与dateTo进行比较)。
答案 3 :(得分:0)
这样做
Date dateFrom ="your from date";
Calendar cal = GregorianCalendar.getInstance();
cal .setTime(dateFrom);
cal.add(Calendar.DAY_OF_MONTH, 45);
Date expireDate = cal.getTime();
Date dateTo = new Date();
if(dateTo.after(expireDate)){
}
答案 4 :(得分:-1)
由于Java中的时间戳是从UNIX纪元开始的毫秒数 - 将45天更改为毫秒数(45d = 45 * 24h = 45 * 24 * 3600s = 45 * 24 * 3600 * 1000ms),因此如果:
(time_B + 45*24*3600*1000) >= time_A
这意味着time_B与time_A
的时间相差45天(或更长)当然你也可以使用JodaTime和其他库。