Vergleich der Daten in Millisekunden
Sagen, ich habe zwei Datumsfelder receiveDate und currentDate. Ich möchte, um zu überprüfen, ob receiveDate war 5 Tage vor dem Systemdatum. Was ich Tat, war, zum konvertieren der Daten in Millisekunden vergleichen und dann gegen 5. Gibt es einen besseren Weg, dies zu tun? Wenn ja, wie und warum die mine ist weniger besser? Danke.
Methode, die ich schrieb -
private static final double DAY_IN_MILLISECONDS = 86400000;
//Param date is the receivedDate
private long getDaysOld(final Date date) {
Calendar suppliedDate = Calendar.getInstance();
suppliedDate.setTime(date);
Calendar today = Calendar.getInstance();
today.setTime(currentDate);
double ageInMillis = (today.getTimeInMillis() - suppliedDate.getTimeInMillis());
double tempDouble;
if(isEqual(ageInMillis, 0.00) || isGreaterThan(Math.abs(ageInMillis), DAY_IN_MILLISECONDS)) {
tempDouble = ageInMillis / DAY_IN_MILLISECONDS;
} else {
tempDouble = DAY_IN_MILLISECONDS / ageInMillis;
}
long ageInDays = Math.round(tempDouble);
return ageInDays;
}
Dann habe ich so etwas wie-
long daysOld = getDaysOld(receivedDate) ;
if(daysOld <= 5) {
.... some business code ....
}
Haben Sie Sorge, über der Zeit Veränderungen durch die Sommerzeit? Zweimal im Jahr, wenn Sie nicht aufpassen, Ihre Spannweite wird reduziert auf 4 Stunden oder auf 6 erhöht.
Im Allgemeinen ist dies eine nützliche Maxime zu verabschieden: nicht Ihr eigenes Datum - /Zeit-Berechnungen.
Dein code ist absolut verrückt. Warum sind Sie mit dem Kalender Instanzen gehen von Termin zu einer Millisekunde zählen? Warum ist ageInMillis ein double? Was auf der Erde ist der else-block zu tun?
seine Spannweite beträgt fünf Tage. Aber du hast Recht, darüber müssen die Versorgung mit (Sommer -) Zeit.
Anderson - oops, ich meinte Tage und versagt, lol.
Im Allgemeinen ist dies eine nützliche Maxime zu verabschieden: nicht Ihr eigenes Datum - /Zeit-Berechnungen.
Dein code ist absolut verrückt. Warum sind Sie mit dem Kalender Instanzen gehen von Termin zu einer Millisekunde zählen? Warum ist ageInMillis ein double? Was auf der Erde ist der else-block zu tun?
seine Spannweite beträgt fünf Tage. Aber du hast Recht, darüber müssen die Versorgung mit (Sommer -) Zeit.
Anderson - oops, ich meinte Tage und versagt, lol.
InformationsquelleAutor Milli Szabo | 2010-10-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es kann verkürzt werden, eine Menge:
Yep, das ist falsch.
InformationsquelleAutor Eugene Kuleshov
geben versuchen,joda-time. Berechnungen mit der systemeigenen API ist immer akwards am besten. Joda Zeit macht diese Art der Berechnung MUUUCH einfacher und Umgang mit Zeit-Zonen ziemlich gut.
InformationsquelleAutor Newtopian
InformationsquelleAutor Lavir the Whiolet
Kann man nicht einfach subtrahieren und dividieren durch 24*60*60*1000 wegen der Sommerzeit (in dem einen Tag haben könnte, 23 oder 25 Stunden).
Beispielsweise in Großbritannien die Uhren nach vorne verschoben um eine Stunde auf 28/03/2010. Der Unterschied zwischen 27/03/2010 und 28/03/2010 sollte 1 Tag, aber wenn Sie Folgen diesem Ansatz erhalten Sie 0.
Brauchen Sie, um den offset zu berücksichtigen:
InformationsquelleAutor dogbane
All das hängt davon ab, was "fünf Tage" bedeutet. Wenn Sie erhalten, etwas, Montag Mittag, dann am Samstag Nachmittag Tat Sie es erhalten innerhalb von fünf Tagen oder nicht? Die verstrichene Zeit größer ist als fünf Tage, aber der Tag Sie es erhalten, ist fünf Tage her. Überlegen Sie, wie würden Sie diese Frage beantworten; nun, was Sie darüber, wie Ihre Mutter würde die Frage beantworten. Es ist vielleicht nicht dasselbe - ich würde vorschlagen, dass die meisten Menschen, insbesondere nicht-Programmierern, zählen die Weitergabe von Tagen durch das bestehen von lokalen midnights. Fünf Uhr am Mittwoch morgen ist ein Tag, nachdem die elf von dreißig auf Dienstag Nacht, obwohl es weniger als einen Tag (weniger als ein Viertel von einem Tag!) später.
So, ich denke, das, was Sie wollen zu tun ist, vergleichen Sie nur die Termine, nicht die Zeiten. Sie können dies tun, mit Kalender, indem Sie den Nullabgleich alle die Zeit-Felder. Gegeben eine arrivedDate und ein Gebietsschema (so können Sie sagen, Wann Mitternacht ist), ich denke, das ist richtig:
Sollten Sie testen, dass Sie gründlich, bevor Sie tatsächlich, es zu verwenden, obwohl.
InformationsquelleAutor Tom Anderson
Unten ist meine Methode, die gibt mir genaue Unterschied in Tagen,
InformationsquelleAutor Azhar Bandri