java - 仅比较两个日期的时间部分,忽略日期部分

标签 java datetime date time

给定两个 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/

相关文章:

java - 将 JavaPairRDD 转换为 JavaRDD

java - 在 hashmap 中实现 put 方法

python-3.x - (Python) 按 mongoDB 集合中存储为字符串的日期进行查询

javascript - 以 31 为日期创建日期在输出中给出 30

c# - 如何只取年份的最后 3 位数字

Java 2D游戏角色行走?

java : get values from matrix

c# - 日期转换: From LINQ to JSON to Javascript

java - 如何使用stripes框架将日期从JSP传递到Java?

php - 查询15分钟内添加的行