3 Stimmen

Vergleich des heutigen Datums + 30 Tage mit einem anderen Datum

Ich versuche es mit einem Beispiel:

DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
String date = "03/09/2010"; //30 days from today
Date usefullDate = df.parse(date);

Calendar todaysDatePlus30Days = Calendar.getInstance();
todaysDatePlus30Days.add(Calendar.DAY_OF_YEAR, 30);

System.out.println ("Compared Value: " +
usefullDate.compareTo(todaysDatePlus30Days.getTime()))

der gedruckte Wert ist -1 . warum wird es nicht gedruckt 0 ?

Ich denke, das Problem ist, dass todaysDatePlus30Days.getTime() bringt auch die aktuelle Zeit mit. während usefullDate Die Zeit ist 00:00:00 .

Die nächste Frage ist also, wie kann ich einfach die date ?

3voto

Pointy Punkte 387467

Das von Ihnen analysierte Datum ist implizit Mitternacht dieses Datums. Das Datum, das Sie konstruieren, ist die aktuelle Uhrzeit.

Versuchen Sie es:

Calendar todayPlus30 = new GregorianCalendar() {{
  add(Calendar.DAY_OF_YEAR, 30);
  set(Calendar.HOUR_OF_DAY, 0);
  set(Calendar.MINUTE, 0);
  set(Calendar.SECOND, 0);
  set(Calendar.MILLISECOND, 0);
}};

Ich habe vielleicht ein paar dieser Konstanten falsch, und Sie können dies mit Calendar.newInstance() tun, wenn Sie möchten, obwohl die Syntax ist ein wenig anders.

3voto

Brian Agnew Punkte 260470

Als weitere Bemerkung würde ich folgende Fragen untersuchen JodaTime für alle datumsbezogenen Java-Arbeiten. Es ist viel intuitiver und leidet nicht unter Threading-Problemen in den Datums-/Zeitformatierungs- und Parsing-Klassen (anders als die Standard-Java-Bibliotheken). Heutzutage ist es ein de facto Ersatz für die java.util.{Date,Calendar} Durcheinander.

siehe z.B. die LocalDate Klasse und ihre plusDays() Methode.

1voto

Bozho Punkte 570413

Wenn Sie System.out.println(..) ist das Ergebnis:

Tue Mar 09 00:00:00 EET 2010
Tue Mar 09 20:31:39 EET 2010

Sie sind also nicht gleich - ihre Arbeitszeiten sind unterschiedlich. Der Grund dafür ist Calendar.getInstance() gibt das aktuelle Datum zurück y Zeit.

Wenn Sie wollen, dass sie gleich sind, müssen Sie set(..) die Felder Stunden, Minuten und Sekunden auf 0.

1voto

stacker Punkte 65961

Wenn Sie die folgenden Zeilen zu Ihrem Beispiel hinzufügen, werden Sie feststellen, dass useful Date eine andere Zeit hat

System.out.println ("" + usefullDate );
System.out.println ("" + todaysDatePlus30Days.getTime());

0voto

Peter Lawrey Punkte 511323

Ich schlage vor, JodaTime zu verwenden, aber wenn Sie long für Datum/Uhrzeit verwenden, können Sie auch...

long todaysDay = System.currentTimeMillis() / MILLIS_PER_DAY;
long in30days = todaysDay + 30;
long usefulDay = usefulDate.getTime() / MILLIS_PER_DAY;
if (in30days == usefulDay) // days are the same.

Hinweis: Die Berechnungen werden in der Zeitzone GMT+0 durchgeführt. Dies kann einen Unterschied machen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X