Das Datum vor n Tagen

Hallo,

ich habe ein Datum als String in folgendem Format vorliegen: "yyyy-MM-dd".

Ist es nun mittels Datumsfunktionen möglich, das Datum herauszufinden, das n Tage zurück liegt?

Wenn ich zB das Datum 7. März 2010 angebe, müsste mir die Funktion bei fünf Tagen in der Vergangenheit den 2. März 2010 zurückgeben. Ist mein Datum der 1.1.2010, so gibt die Funktion 27.12.2009 zurück etc.

Leider finde ich nichts dergleichen. Und neu schreiben ist mit Sicherheit nicht von Nöten?!




LG KK
 
Moin,

ich weiß nicht, ob es der Weisheit letzter Schluß ist, aber wir rechnen hier für einen Terminplaner das jeweilige Datum, so wie es von unserer "Datenbank" kommt in die gesamte Sekundenzahl um (also long), um dann damit Differenzen berechnen zu können!

Gruß
Klaus
 
Hallo,

schau mal hier:
Java:
package de.tutorials;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class DateArithmeticExample {
  public static void main(String[] args) throws Exception{
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
   GregorianCalendar gc = new GregorianCalendar();
   gc.setTime(dateFormat.parse("01.01.2010"));
   
   System.out.println(dateFormat.format(gc.getTime()));
   
   gc.add(Calendar.DAY_OF_MONTH, -5);
   
   System.out.println(dateFormat.format(gc.getTime()));
  }
}

Einfacher gehts (wie immer bei allen Sachen die mit Datums- und Zeit Arithmetik zu tun haben) mit jodatime:
http://joda-time.sourceforge.net/

Java:
LocalDate date = new LocalDate(2010, 1, 1);
LocalDate dateBefore5Days = date.minusDays(5);

Gruß Tom
 
Hallo,

ich hatte es schon mittels

Code:
String date = new SimpleDateFormat("yyyy-MM-dd").format((Calendar.getInstance().getTimeInMillis() )-432000000);

versucht. Dort lasse ich mir einfach das Datum vor 432000000msecs ( 5 Tagen ) in Tage konvertieren.

Natürlich ist folgendes sinniger:

Code:
Calendar now = Calendar.getInstance();
now.add(Calendar.DAY_OF_MONTH, -5);
String date = new SimpleDateFormat("yyyy-MM-dd").format(now.getTime());

Dass die add-Funktion auch das Rechnen ins Negative beherrschen sollte, ist auch logisch. Nicht drüber nachgedacht, sorry.

jodatime werde ich mir mal anschauen, danke für den Tipp!




LG Tom
 
Hallo,

ich nochmal mit einer kleinen Frage außerhalb dieses Beitrages:

Vorhin hat Tom die Lib jodatime für DateTime-Funktionen empfohlen. Vor einiger Zeit hatte ich ein Problem in Verbindung mit MySQL, dort wurde mir c3p0 empfohlen. Eine weitere Lib, die als state of the art angepriesen wurde.

Gibt es vielleicht eine kleine Sammlung für solche Hilfsbibliotheken im Java-Bereich?

Und dabei meine ich ganz einfache Dinge, wie zB Dateioperationen, Stringoperationen etc.



LG KK
 
Hallo,

ich hatte es schon mittels

Code:
String date = new SimpleDateFormat("yyyy-MM-dd").format((Calendar.getInstance().getTimeInMillis() )-432000000);

versucht. Dort lasse ich mir einfach das Datum vor 432000000msecs ( 5 Tagen ) in Tage konvertieren.

Es sei noch dazu gesagt, dass wenn man nur genau die millisekunden für 5 Tage abzieht, man bei den Sommerzeitschalttagen die 1h Umstellung nicht mitbekommt.
Da kommt es drauf an, was man als Ergebnis erwartet.

Java:
        Calendar calendar = new GregorianCalendar(2010,10,1,5,0,0);
        java.util.Date date = new java.util.Date(calendar.getTimeInMillis() - 432000000);
        System.out.println(date);
        calendar.add(Calendar.DAY_OF_MONTH, -5);
        System.out.println(calendar.getTime());

Ergebnis: (letzter So im Okt ist Sommer-/Winterzeit Umstelltag)

Wed Oct 27 06:00:00 CEST 2010
Wed Oct 27 05:00:00 CEST 2010
 
Zurück