Klasse Date scheint sich zu verrechnen

mercur118

Grünschnabel
Hallo alle zusammen!

Ich bastle gerade mit ein paar Datumsangaben herum. Ich speichere die Datumsangaben als Long Werte in einer DB, um mich an System.currentMillis() anzupassen.

Es ist jetzt in meinem Programm nötig, Daten in der Zukunft zu berechnen. Also zum Beispiel auf das heutige Datum 115 Tage aufzurechnen. Dabei muss das ganze nur Tagesgenau sein. Hierzu hole ich mir das aktuelle Datum als Long wert und rechne 115 Tage in Millisekunden drauf. Wenn man daraus jetzt ein neues Date() Objekt erzeugt, sollte man meinen, dass es immer hinhaut. Tut es aber nicht...
Wenn ich beispielsweise auf den 01.01. die Tage aufrechne, dann kommt das korrekte Datum raus. Rechne ich den offset auf den 28.07 auf, ist das berechnete Datum um einen Tag zu früh.
Ich verstehe nicht, warum das so ist. Kann mir jemand helfen?

Gruß
Ben
 
So, für die Leute, die es interessiert, ich weiß immer noch nicht, warum Java so rechnet, wie es rechnet, aber wenn man die Offsets mit GregorianCalendar errechnet, dann stimmen die Daten auch immer. Naja, das muss man erstmal wissen.

Gruß
Ben
 
Wenn Du etwas von Deinem QuellCode verraten könntest, wäre es sehr hilfreich gewesen. ;-) Sonst ist es ziemlich schwer vorzustellen, wo der Fehler sein könnte.

Gruß

Taik
 
Joa, da hast du wohl recht. Ist aber ja auch nicht so wild, hab es dann ja auch alleine behoben. Wie heißt es so schön: nur selber denken macht fett ;)

Beim nächsten problem probier ich das dann mal mit dem Quelltext...

Gruß
Ben
 
Hallo!

Datumsberechnungen erledigt man besser mit dem GregorianCalendar.
Bsp:
Code:
 /**
  * 
  */
 package de.tutorials;
 
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.GregorianCalendar;
 
 /**
  * @author Tom
  *
  */
 public class DateCalulcationExample {
 
 	/**
 	 * @param args
 	 */
 	public static void main(String[] args) throws Exception{
 		
 		SimpleDateFormat sdf = new SimpleDateFormat("dd.mm.yyyy");
 		Date startDate = sdf.parse("01.01.2005");
 		
 		GregorianCalendar gc = new GregorianCalendar();
 		gc.setTime(startDate);
 		System.out.println(startDate);
 		
 		gc.add(Calendar.DAY_OF_YEAR,115);
 		System.out.println(gc.getTime());
 	}
 }

Gruß Tom
 
Zurück