我正在使用一些遗留代码并且我正在迭代一些值,遗留代码正在使用 sql.timestamp 值检查新一天的开始:
public static final long MILLIS_PER_SECOND = 1000;
public static final long MILLIS_PER_MINUTE = 60 * MILLIS_PER_SECOND;
public static final long MILLIS_PER_HOUR = 60 * MILLIS_PER_MINUTE;
public static final long MILLIS_PER_DAY = 24 * MILLIS_PER_HOUR;
if (entry.getPeriodEnd().getTime() % TimestampUtils.MILLIS_PER_DAY == 0 || i >= throughputEntries.size()) {
...
}
结果永远不会0
,所以它只会进入if
当i >= throughputEntries.size()
我无法弄清楚他是如何得到0
结果的,可能他的数据不同,并且总是以特定的时间段结束,这会产生0
我可以重写代码来检查日期,但想知道他是如何用他的代码实现的。
我不确定这可以用我提供的代码解决,但也许我遗漏了一些东西......
编辑
所以我最终明白了这一点,感谢@t0r0X 和@Leo
我已修改我的代码以使用Joda-Time,如下所示:
LocalDate newDay = null;
int count = 0;
public void calcAvg(){
DateTimeZone zone = DateTimeZone.getDefault();
LocalDate throughtputDate = entry.getPeriodEnd().toDateTime(zone).toLocalDate();
if ( this.newDay(throughtputDate) || i >= throughputEntries.size()) {
...
}
}
public boolean newDay(LocalDate date){
boolean go = false;
if(count !=0){
if(date.isAfter(newDay)){
newDay = date;
go = true;
}
}
else{
newDay = date;
count++;
}
return go;
}
可能比我写的方法更干净的检查新日期的方法,但时间不等人。