如何仅比较java.sql.TimeStamp中的时间

如何仅比较java.sql.TimeStamp中的时间,java,Java,上述代码也考虑了日期。 我需要比较Timestamp的两个实例,并且只比较Timestamp中的时间部分。不应考虑日期。每当我比较时,比较也会考虑日期。一种解决方案,在时间戳上使用: public long compareTwoTimeStamps(Timestamp currentTime, Timestamp oldTime) { long milliseconds1 = oldTime.getTime(); long milliseconds2 = currentTime.get

上述代码也考虑了日期。 我需要比较Timestamp的两个实例,并且只比较Timestamp中的时间部分。不应考虑日期。每当我比较时,比较也会考虑日期。

一种解决方案,在时间戳上使用:

public long compareTwoTimeStamps(Timestamp currentTime, Timestamp oldTime) 
{
  long milliseconds1 = oldTime.getTime();
  long milliseconds2 = currentTime.getTime();
  long diff = milliseconds2 - milliseconds1;
  long diffMinutes = diff / (60 * 1000);
  return diffMinutes;
}
或者不使用任何不推荐的方法:

public long compareTwoTimeStamps(java.sql.Timestamp currentTime, java.sql.Timestamp oldTime) 
{
    long min1 = oldTime.getHours() * 60 + oldTime.getMinutes();
    long min2 = currentTime.getHours() * 60 + currentTime.getMinutes();
    return min2 - min1;
}

我认为最安全的方法是使用日历:

public long compareTwoTimeStamps(java.sql.Timestamp currentTime, java.sql.Timestamp oldTime)
{
    final Calendar oldCal = Calendar.getInstance();
    oldCal.setTime(oldTime);
    long min1 = oldCal.get(Calendar.HOUR) * 60 + oldCal.get(Calendar.MINUTE);
    final Calendar currentCal = Calendar.getInstance();
    currentCal.setTime(currentTime);
    long min2 = currentCal.get(Calendar.HOUR) * 60 + currentCal.get(Calendar.MINUTE);
    return min2 - min1;
}
这将考虑夏令时

更新:


哦,它没有使用任何不推荐的方法。

另一种方法是利用JODA Time的LocalTime:

public static boolean sameTime(Date a, Date b) {
    Calendar ca = Calendar.getInstance();
    ca.setTime(a);
    Calendar cb = Calendar.getInstance();
    cb.setTime(b);
    return ca.get(Calendar.HOUR_OF_DAY) == cb.get(Calendar.HOUR_OF_DAY)
            && ca.get(Calendar.MINUTE) == cb.get(Calendar.MINUTE)
            && ca.get(Calendar.SECOND) == cb.get(Calendar.SECOND)
            && ca.get(Calendar.MILLISECOND) == cb.get(Calendar.MILLISECOND);
}

通过使用模截断日期,只能比较表示时间的getTime()的毫秒数:

public static boolean sameTime(Date a, Date b) {
    return new LocalTime(a).compareTo(new LocalTime(b)) == 0;
    // equals() or isEquals() may also work depending on your case, you may try
}

你能出示你的密码吗?这将有助于理解您试图实现的目标。您尝试过什么吗???您搜索过堆栈溢出的其余部分了吗,因为在这个主题上有过多的问题和答案?请看,我只想从两个不同的时间戳中提取时间。让我告诉你我真正需要什么。假设我有一个时间戳1=14-04-2015 11.30.00,另一个为时间戳2=01-04-2015 11.15.00。因此,从这两种方法中,我只想比较超时时间。我宁愿避免使用不推荐的方法
private static long MILLIS_PER_DAY = 1000 * 60 * 60 * 24l;
private static long MILLIS_PER_MINUTE = 1000 * 60l;
public long compareTwoTimeStamps(Timestamp currentTime, Timestamp oldTime) 
{

  long milliseconds1 = oldTime.getTime() % MILLIS_PER_DAY;
  long milliseconds2 = currentTime.getTime() % MILLIS_PER_DAY;
  return milliseconds2 - milliseconds1;
  // for minutes:
  // return (milliseconds2 - milliseconds1) / MILLIS_PER_MINUTE;
}