1

我是 Java 新手。我正在使用两个 Timestamp 对象dateFromdateTo. 我想检查是否dateFrom45 天。我用这个代码片段来比较这个 dateToif(dateFrom.compareTo(dateTo) < 45) { // do the action; }

45对代码中给出的内容感到困惑。我可以期待正确的结果吗?它会符合我的结果吗?

4

5 回答 5

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");
}

不过,这相当难看。您不使用 a 是否有特定原因Calendar

于 2013-11-04T14:20:22.777 回答
1

您必须从逻辑上考虑一下。首先,您需要获取dateTo日期前 45 天的时间戳。时间有不同的单位(秒、分钟、小时、天),所以< 45在这种情况下仅仅检查是没有意义的。该compareTo()方法仅用于订购以了解时间戳是在另一个之前还是之后。

Calendar您可以首先为时间戳创建一个,然后add() dateFrom 45 天。然后你可以使用before()方法来检查是否dateFrom是 before dateTo

于 2013-11-04T14:23:35.373 回答
0

使用 Joda Time 或 Calendar 类(将 45 天添加到 dateFrom,将结果与 dateTo 进行比较)。

于 2013-11-04T14:17:41.423 回答
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)){

}
于 2013-11-04T14:22:44.823 回答
-1

由于 Java 中的时间戳是从 UNIX 纪元开始的毫秒数 - 将 45 天更改为毫秒数 (45d=45*24h=45*24*3600s=45*24*3600*1000ms) 所以如果:

(time_B + 45*24*3600*1000) >= time_A

这意味着 time_B 是 45 天(或更多)“更远”的时间,time_A

当然你也可以使用 JodaTime 和其他库。

于 2013-11-04T14:22:38.040 回答