Vergleichen Termine ignorieren Millisekunden?
Gibt es eine Möglichkeit zum vergleichen von zwei Kalender-Objekte, aber ignorieren Millisekunden?
Ich geschrieben habe, ein test-Fall, dass im Vergleich der beiden Kalender-Objekte, aber es gibt ein problem. Obwohl alle Tag, Monat, Stunden und Minuten entsprechen, die Millisekunden nicht entspricht. Ich den erwarteten Termin, bevor man das eigentliche Datum:
/**
* @return
*/
private Calendar getExpectedOneMonthDateFromCurrentDate() {
Calendar expectedOneMonth = Calendar.getInstance();
expectedOneMonth.add(Calendar.MONTH, -1);
return expectedOneMonth;
}
assertEquals(getExpectedOneMonthDateFromCurrentDate(),
DateRange.LAST_ONE_MONTH.getToDate());
- Warum nimmst du nicht einfach die Millisekunden auf 0 während der Prüfung? Sie könnte auch einfach nur die long-Wert des Datums, der Runde 1000er und vergleichen. Btw, könnten Sie mit Joda Zeit für eine einfachere und einheitlichere Zeit-API (eine ähnliche API ist Teil von Java 8)
- Versuchen Sie, einen Komparator.
- prüfen Sie diesen link, es könnte hilfreich stackoverflow.com/questions/1671001/...
- ich habe verwendet joda Zeit vor und glauben Sie mir, ich wünschte, ich könnte es gebrauchen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Entfernen Millisekunden aus dem Kalender
Müssen Sie
und möglicherweise auch
wenn Sie nur die Minuten übereinstimmen.
Die Lösung für die Einstellung der Millisekunden auf 0 hat ein Problem: wenn die Termine 12:14:29.999 und 12:14:30.003, die Sie festlegen, werden die Termine um 12:14:29 und 12:14:30 jeweils und erkennen den Unterschied, wo Sie nicht wollen.
Dachte ich über einen Komparator:
Jedoch keine gute Lösung, weder, wie dieser Komparator bricht die folgende Regel:
Der Implementierer muss garantieren, dass x.compareTo(y)==0 impliziert, dass sgn(x.compareTo(z)) == sgn(y.compareTo(z)) für alle z.
Was führt zu
(x=y and y=z) => x=z
.Also ich sehe keine Lösung... Aber in der Tat, wenn Sie definieren einige andere Termine, Sie werden anders, nicht wahr?
IMHO der einfachste Weg ist die Verwendung von truncate() aus der Apache-Commons-DateUtils (Apache Commons DateUtils) zu entfernen Millisekunden und vergleichen Sie die resultierenden Daten.
Einer option auf call-Kalender.set(Calendar.MILLISECOND, 0) um die Millisekunden. Eine andere ist, rufen getTimeInMillis (), um die Zeit in Millisekunden, für beide Kalender. Sie können dann teilen diese durch 1000 vor dem Vergleich zu entfernen die Millisekunden.
Ich würde empfehlen, mit Joda Time, wenn Sie sind die Durchführung alles, was neben der basic-Datum-Manipulationen. In Ihrem Fall kann man abschneiden, die Termine so gerne und dann vergleichen :
millisOfDay()
mitsecondOfDay()
Wenn Sie mit jodaTime, die setCopy("0") - Methode gibt ein DateTime-Objekt mit Millisekunden auf 0 gesetzt, um es einfach zu vergleichen: