# Anzahl der Monate ermitteln



## Iron Monkey (31. Mrz 2010)

Hi!

In "objIBDatum" steht ein Datum z.B. 03.02.2010 und das Ergebnis kommt 1 Monat raus! Es soll eigentlich 2 Monate rauskommen! Wo habe ich falsch gemacht oder muss ich im Ergebnis die Anzahl der Monate plus 1 hochrechnen?


```
Date now = new Date();

DateTime dateIBDatum = new DateTime( (Date) objIBDatum );
DateTime dateNow = new DateTime( now );

// Anzahl der Monate zwischen IB-Datum und Now-Datum ermitteln!
int nMonate = Months.monthsBetween( dateIBDatum, dateNow ).getMonths();
```

Danke im voraus!

Gruß
Iron Monkey


----------



## The_S (31. Mrz 2010)

Was sind denn DateTime und Months für Klassen?


----------



## AlexSpritze (31. Mrz 2010)

Vielleicht kommt 1,x  Monate raus und die Nachkommastellen werden abgeschnitten. Aber deine zugrundliegender Code wäre zum Verständnis schon wichtig.


----------



## Iron Monkey (31. Mrz 2010)

The_S hat gesagt.:


> Was sind denn DateTime und Months für Klassen?



OK, das hätte ich auch noch zusätzlich erwähnen können, aber ich dachte, dass jeder die Klasse "DateTime" kennt!

Also, ich benutze alles mit der *Jodatime API*!

Gruß
Iron Monkey


----------



## Iron Monkey (31. Mrz 2010)

AlexSpritze hat gesagt.:


> Vielleicht kommt 1,x  Monate raus und die Nachkommastellen werden abgeschnitten. Aber deine zugrundliegender Code wäre zum Verständnis schon wichtig.



Die 1,x Monate würden nie ergeben, da die Methode *getMonths()* als Datentyp int zurückgibt! ;-)

Gruß
Iron Monkey


----------



## The_S (31. Mrz 2010)

Woher sollte man die Klasse kennen? Hör zum ersten Mal von der Joda Time API. Warum verwendest du die und nicht den Java Standard?


----------



## Facepalm (31. Mrz 2010)

Iron Monkey hat gesagt.:


> Die 1,x Monate würden nie ergeben, da die Methode *getMonths()* als Datentyp int zurückgibt! ;-)
> 
> Gruß
> Iron Monkey


----------



## faetzminator (31. Mrz 2010)

Habs mir gerade nochmals durchgelesen. Warum 2 Monate? Das ist doch erst in 2,3 Tagen der Fall?


----------



## Iron Monkey (31. Mrz 2010)

faetzminator hat gesagt.:


> Habs mir gerade nochmals durchgelesen. Warum 2 Monate? Das ist doch erst in 2,3 Tagen der Fall?



Vom 03.02.2010 bis 31.03.2010 sind nicht 2,3 Tagen! ;-)

Warum 2 Monate?
--> Wenn das Datum für die Inbetriebnahme steht, dann muss es für Februar auch mitgerechnet werden. Deshalb 2 Monate statt 1 Monat!

Gruß
Iron Monkey


----------



## faetzminator (31. Mrz 2010)

Ich sagte nicht 2, 3 Tage, sondern in 2, 3 Tagen ist es soweit, dann haben wir den 03.04., dann sind 2 Monate rum.
--> Bis heute gingen nämlich 1 Monat und ein paar Tage (28? 29?) rum.


----------



## AlexSpritze (31. Mrz 2010)

Iron Monkey hat gesagt.:


> Die 1,x Monate würden nie ergeben, da die Methode *getMonths()* als Datentyp int zurückgibt!



Gut erkannt, ... wenn die Differenz zwischen den beiden Daten aber zufällig 1,9876 Monate ist, dann wäre fraglich wie die Methode getMonths diese Differenz als int zurückgibt. Math.floor()/ceil() ... oder einfach abschneiden?
Da wird es dann doch auch Methoden geben wie getDays(), getHours() usw.?


----------



## Iron Monkey (31. Mrz 2010)

faetzminator hat gesagt.:


> Ich sagte nicht 2, 3 Tage, sondern in 2, 3 Tagen ist es soweit, dann haben wir den 03.04., dann sind 2 Monate rum.
> --> Bis heute gingen nämlich 1 Monat und ein paar Tage (28? 29?) rum.



Achso, natürlich! Da hast du recht, aber in dem Fall muss man den Monat "Februar" mitrechnen, da das Gerät von unserer Firma im Februar in Betrieb genommen wurde.

Ich weiss, dass das Ergebnis mit 1 Monat wie eine optische Täuschung ist. So sehe ich das auch wie du, aber mein Chef sagte mir, dass das 2 Monate sein soll. *grrr*

Gruß
Iron Monkey


----------



## bygones (31. Mrz 2010)

[c]int nMonate = Months.monthsBetween( dateIBDatum, dateNow ).getMonths() + 1;[/c]



> Warum verwendest du die und nicht den Java Standard?


um mal Josh Blochs Worte in etwa wiederzugeben "Date and Calendar are more than the worst things we ever did in Java"


----------



## Iron Monkey (31. Mrz 2010)

AlexSpritze hat gesagt.:


> Gut erkannt, ... wenn die Differenz zwischen den beiden Daten aber zufällig 1,9876 Monate ist, dann wäre fraglich wie die Methode getMonths diese Differenz als int zurückgibt. Math.floor()/ceil() ... oder einfach abschneiden?
> Da wird es dann doch auch Methoden geben wie getDays(), getHours() usw.?



Naja, ich glaube, getMonths() gibt nur die 1 zurück, ohne mit Math auf- / abzurunden, zurück, sonst wäre es mit 2 Monate ja richtig!

Gruß
Iron Monkey


----------



## Iron Monkey (31. Mrz 2010)

bygones hat gesagt.:


> [c]int nMonate = Months.monthsBetween( dateIBDatum, dateNow ).getMonths() + 1;[/c]



Genau so stumpf habe ich auch geschrieben, aber ich war mir nicht so sicher, ob das ein Sinn macht! Deshalb habe ich hier auch eine Frage gestellt: Entweder ( + 1 ) hochzählen oder eine andere Möglichkeit!



bygones hat gesagt.:


> um mal Josh Blochs Worte in etwa wiederzugeben "Date and Calendar are more than the worst things we ever did in Java"



Danke! Das ist mein Grund, warum ich mit JodaTime API arbeite! 

Gruß
Iron Monkey


----------



## bygones (31. Mrz 2010)

Iron Monkey hat gesagt.:


> Genau so stumpf habe ich auch geschrieben, aber ich war mir nicht so sicher, ob das ein Sinn macht! Deshalb habe ich hier auch eine Frage gestellt: Entweder ( + 1 ) hochzählen oder eine andere Möglichkeit!
> 
> Gruß
> Iron Monkey


Die joda api ist schon richtig, da sie nicht die Tage beachtet und dann magic like sagt "oh es sind mehr als 31 tage, also ein neuer monat", sondern zwischen Februar und Maerz ist nunmal 1 Monat unterschied.

Wenn dein chef nun eben dieses magic like "oh es sind mehr als 31 tage, also ein neuer monat" verlangt... viel Spass... man beachte 28 / 29 / 30 / 31 Tage sind manchmal valide "neumonate"


----------



## tfa (31. Mrz 2010)

Sollte Joda-Time, bzw. eine Weiterentwicklung davon, nicht auch Bestandteil der Java 7-API werden?


----------



## faetzminator (31. Mrz 2010)

da hast du recht:


			
				http://jcp.org/en/jsr/detail?id=310 hat gesagt.:
			
		

> This JSR will draw heavily on experience gained from the Joda-Time project ( Joda Time - Java date and time API - Home). This project reached version 1.0 in early 2005 and is now at version 1.4. Invaluable lessons have been learned and many use cases gathered from user requests.


----------

