给定两个 Date 对象,仅比较它们的时间部分之间的差异,完全忽略年、月和日,有什么好的方法?
与 this question 完全相反.
更新:以下是最终代码以供将来引用:
private long differenceBetween(Date currentTime, Date timeToRun)
{
Calendar currentCal = Calendar.getInstance();
currentCal.setTime(currentTime);
Calendar runCal = Calendar.getInstance();
runCal.setTime(timeToRun);
runCal.set(Calendar.DAY_OF_MONTH, currentCal.get(Calendar.DAY_OF_MONTH));
runCal.set(Calendar.MONTH, currentCal.get(Calendar.MONTH));
runCal.set(Calendar.YEAR, currentCal.get(Calendar.YEAR));
return currentCal.getTimeInMillis() - runCal.getTimeInMillis();
}
最佳答案
如果你想比较日期的底层二进制(long int)值,你可以这样做:
public int compareTimes(Date d1, Date d2)
{
int t1;
int t2;
t1 = (int) (d1.getTime() % (24*60*60*1000L));
t2 = (int) (d2.getTime() % (24*60*60*1000L));
return (t1 - t2);
}
附录 1
这种技术具有速度优势,因为它直接使用 Date
对象的底层 long
值,而不是在刻度和日历组件之间进行转换(这是昂贵且缓慢)。它也比弄乱 Calendar
对象简单得多。
附录 2
上面的代码以 int
的形式返回时差,这对于任何时间对都是正确的,因为它完全忽略了日期的年/月/日部分,以及两者之间的差异任何两次都不超过 86,400,000 毫秒(= 1000 毫秒/秒 × 60 秒/分钟 × 60 分钟/小时 × 24 小时/天)。
关于java - 仅比较两个日期的时间部分,忽略日期部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7676149/