# Java Datum berechnen



## kaninchen (10. Aug 2012)

Hallo,

ich habe schon eige Zeit im Netz danach gegooglet, habe aber nichts passendes gefunden:

Problemstellung:

Ich habe einen Datumswert, welcher mir die aktuellen Tage vom Ausgangsdatum 01.01.1990 anzeigt.

Also 41131 = 10.08.2012.

Wie kann ich es jetzt realisieren, das ich ein Anfangsdatum 01.01.1990 einstelle und die Tage (zB 41131) hinzuzähle und dann das aktuelle Datum erhalte.

Für was wird es benötigt:

Es wird unregelmäßig eine Datei von einem Gerät erzeugt, welche das Datum in diesem Fortmat ablegt:

41131.000000000.

Dabei ist der erste block das Datum und der zweite Block die Uhrzeit. Das mit der Uhrzeit habe ich bereits gelöst. Jetzt brauche ich noch das Datum, und die Werte in eine Datenbank einzutragen.

Vielen Dank

LG kaninchen


----------



## Marcinek (10. Aug 2012)

Mit dem GregorianCalendar geht das.


----------



## Gast2 (10. Aug 2012)

Das würde ich mit nem Calendar machen:

```
Calendar cal = GregorianCalendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, 15);
// => 25.08.2012
```



> Ich habe einen Datumswert, welcher mir die aktuellen Tage vom Ausgangsdatum 01.01.1990 anzeigt.
> 
> Also 41131 = 10.08.2012.


41131 Tage sind über 112 Jahre, da kommt man nicht auf 2012


----------



## ThisIsJaavaaa (10. Aug 2012)

gug dir mal 

```
final Calendar c = Calendar.getInstance();
// set 01.01.1990 
c.setTimeInMillis(Long.MIN_VALUE);
// add tage
c.add(Calendar.DAY_OF_YEAR, 41131);
System.out.println(c.getTime());
```


----------



## Gast2 (10. Aug 2012)

Also der setTimeInMillis Befehl wird so aber nicht funktionieren.
Vermutlich meinst du 
	
	
	
	





```
setTimeInMillis(0)
```
? Aber auch das setzt das Jahr nicht auf 1990 sondern auf 1970.


----------



## kaninchen (10. Aug 2012)

Hallo,

;( ja, das stimmt!

Sollte der 01.01.1900 sein (schäm).

Ich habe mehrfach die Kalenderfunktionen durchgelesen, werde aber nicht schlau daraus.

Die normalen Funktionen wie aktuelles Datum/Wochentag  ermitteln geht.
Aber da stosse ich an meine Grenzen.

Vielen Dank

LG kaninchen


----------



## Gast2 (10. Aug 2012)

Alle Befehle stehen doch schon hier im Thread.

```
Calendar cal = GregorianCalendar.getInstance();
cal.setTime(new Date(0,0,1,0,0,0));
cal.add(Calendar.DAY_OF_MONTH, 41131);
```


----------



## kaninchen (10. Aug 2012)

Hallo,

ok, habe es jetzt erfasst :rtfm:.


```
str1 = uwdatumzeit.substring(0,5);
      tf_test.setText(str1);
      strwert = Integer.parseInt(str1);
      Calendar cal = GregorianCalendar.getInstance();
      cal.setTime(new Date(0,0,0,0,0,0));
      cal.add(Calendar.DAY_OF_MONTH, datumwert);
      SimpleDateFormat datumformat = new SimpleDateFormat( "dd.MM.yyyy" );
      datum = datumformat.format( cal.getTime() );
      tf_test.setText(datum);
```

Habe noch folgendes Problem.

Da der Datumswert nicht konstant ist, sondern sich stetig ändert, kann ich in Zeile 6 keinen festen Wert eingeben, was richtig funktioniert, sondern habe eine INT Variable datumwert eingefügt.

Eine Fehlermeldung kommt nicht, es wird aber auch der Wert von datumwert nicht hinzugezählt. Als Ergebnis bekomme ich dann den 01.01.1900. Ja, ich habe überprüft, das datumwert = 41131 ist .

Vielen Dank

LG kaninchen


----------



## Spacerat (10. Aug 2012)

Dann schau dir mal die Uhrzeit von diesem 1.1.1900 an... die dürfte so bei "0h00m41s131" liegen. Da wo du datumswert übergibst wird ein long erwartet, welches Zeit und Datum in Millisekunden beinhaltet.
Andererseits... was'n Quatsch  ... es gibt keinen 41131. Tag in irgend einem Monat. Der Calender "überschlägt" sich anscheinend.


----------



## kaninchen (10. Aug 2012)

Hallo,



Spacerat hat gesagt.:


> Dann schau dir mal die Uhrzeit von diesem 1.1.1900 an... die dürfte so bei "0h00m41s131" liegen. Da wo du datumswert übergibst wird ein long erwartet, welches Zeit und Datum in Millisekunden beinhaltet.
> Andererseits... was'n Quatsch... es gibt keinen 41131. Tag in irgend einem Monat.



kann nicht sein, mit long bekomme ich folgende Fehlermeldung:

umwelt.java:303:10: error: method add in class Calendar cannot be applied to given types;
      cal.add(Calendar.DAY_OF_MONTH, datumwert);
         ^
  required: int,int
  found: int,long
  reason: actual argument long cannot be converted to int by method invocation conversion
1 error

Setzt ich statt der Variable 41131 ein ist das angezeigte Datum OK.

Vielen Dank

LG kaninchen


----------



## Gast2 (11. Aug 2012)

Dann stimmt die Variable nicht. Wo wird die gesetzt? Lass dir die doch mal direkt davor ausgeben.


----------



## kaninchen (11. Aug 2012)

Hallo,

Danke für den Holzhammer!

Die Variable wird in Zeile 3 gesetzt. Man wie doof von mir, konnte nicht gehen.
War gestern wohl schon spät.

Vielen Dank!

Ein schönes Wochenende.

LG kaninchen


----------



## Madlip (11. Aug 2012)

Hatte ein ähnliches Problem mal und wurde dann auf eine andere API Aufmerksam, die date4j. 

Finde die sehr gut und zuverlässig. Hier hast du auch ein Beispiel: Differenz zwischen Zwei Datumswerten berechnen (Stunden, Minuten)  uncutvision


----------



## OSBI_Fan (11. Aug 2012)

Hallo zusammen,

Hier mal ein guter Beitrag, der den Umgang mit Zeit- und Währungsformaten in Java sowie die Lösungen anschaulich darstellt - Link:

Zeit- und Währungsberechnungen in Java | iX

Grüße
OSBI_Fan

OSBI = Open Source Business Intelligence


----------

