Was ist eine gute Methode, um bei zwei Date-Objekten den Unterschied zwischen nur ihrem Zeitanteil zu vergleichen und Jahr, Monat und Tag vollständig zu ignorieren?
Es ist genau das Gegenteil von dieser Frage .
UPDATE: Hier ist der endgültige Code für zukünftige Referenz:
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();
}
Wenn Sie die zugrunde liegenden binären Werte (long int) der Datumsangaben vergleichen möchten, können Sie Folgendes tun:
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);
}
Nachtrag 1
Diese Technik hat den Vorteil der Geschwindigkeit, da sie den zugrunde liegenden long
-Wert der Date
-Objekte direkt verwendet, anstatt zwischen Ticks und Kalenderkomponenten zu konvertieren (was ziemlich teuer und langsam ist). Es ist auch viel einfacher, als mit Calendar
-Objekten herumzuspielen.
Nachtrag 2
Der obige Code gibt die Zeitdifferenz als int
zurück, die für jedes Paar von Zeitpunkten korrekt ist, da die Jahres-/Monats-/Tagesabschnitte des Datums vollständig ignoriert werden und die Differenz zwischen zwei beliebigen Zeitpunkten nicht mehr als 86.400.000 ms beträgt ( = 1000 ms/s × 60 s/min × 60 min/h × 24 h/Tag.
Sie können die Funktion DateTimeComparator.getTimeOnlyInstance()
von Joda time für einen Vergleicher in Betracht ziehen, der zwei Joda-Datumsangaben nur auf der Grundlage der Zeiten vergleicht.
Zum Beispiel:
DateTimeComparator comparator = DateTimeComparator.getTimeOnlyInstance();
comparator.compare(date1, date2);
Schauen Sie sich die Klasse Calendar
an. Es unterstützt das Extrahieren von Stunden, Minuten und Sekunden aus bestimmten Date
s.
Calendar calendar = Calendar.getInstance();
calendar.setTime(yourDateObject);
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
Falls Sie JODA nicht verwenden können,
erstellen Sie 2 Kalenderobjekte, setzen Sie Jahr, Monat und Tag auf 0.
Vergleiche sie....
Wenn JODA keine Option ist, besteht einer der kürzesten Ansätze darin, die Zeit in Strings umzuwandeln und sie dann zu vergleichen.
DateFormat df = new SimpleDateFormat("HHmmssSZ");
df.format(date1).equals(df.format(date2));
wenn Sie nur den zeitlichen Teil der Daten vergleichen möchten, erhalten Sie das richtige Ergebnis.
public long compareTimes(Date d1, Date d2)
{
long t1;
long t2;
t1 = d1.getHours()*60*60+d1.getMinutes()*60+d1.getSeconds();
t2 = d2.getHours()*60*60+d2.getMinutes()*60+d2.getSeconds();
long diff = t1-t2;
System.out.println("t1 - "+t1+", t2 - "+t2+", diff - "+diff);
return diff;
}
Ich weiß nicht, wie gut geübt oder effizient diese ist, aber ich habe mit dem Date-Objekt eine einfache Funktion geschrieben, die meinen Zwecken dient. Ein wahrer oder falscher Wert ist der erste Datumswert, der größer als der zweite ist. Die Eingänge d1 && d2 sind Datumsobjekte.
function CompareTimes(d1, d2) {
if (d1.getHours() < d2.getHours()) {
return false;
}
if (d1.getHours() > d2.getHours()) {
return true;
} else {
return (d1.getMinutes() > d2.getMinutes());
}
};