# Das Datum vor n Tagen



## KartoffelKiffer (28. April 2010)

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


----------



## vfl_freak (28. April 2010)

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


----------



## matdacat (28. April 2010)

Die add-Methode von Calendar ist nichts für Euch?


----------



## Thomas Darimont (28. April 2010)

Hallo,

schau mal hier:

```
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/


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

Gruß Tom


----------



## KartoffelKiffer (28. April 2010)

Hallo,

ich hatte es schon mittels


```
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:


```
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


----------



## KartoffelKiffer (28. April 2010)

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


----------



## Anime-Otaku (29. April 2010)

KartoffelKiffer hat gesagt.:


> Hallo,
> 
> ich hatte es schon mittels
> 
> ...



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.


```
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


----------

