簡體   English   中英

如何只比較 java.sql.TimeStamp 中的時間

[英]How to compare only time from java.sql.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;
}

上面的代碼也考慮了日期。 我需要比較 Timestamp 的 2 個實例,並且只比較 Timestamp 的時間部分。 不應考慮日期。 每當我比較它時,比較也會考慮日期。

一種解決方案,在時間戳上使用getHoursgetMinutes

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

我認為最安全的方法是使用日歷:

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

這將考慮夏令時。

更新:

哦,它沒有使用任何不推薦使用的方法。

另一種方法是利用 JODA 時間的 LocalTime:

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
}

您可以通過使用模數截斷日期來僅比較表示時間的 getTime() 的毫秒數:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM