Differenz in Monaten berechnen --- DateDiff()?

Status
Nicht offen für weitere Antworten.

bronks

Top Contributor
Hi!

Es geht darum, aus 2 GregorianCalendar die Zeitdifferenz in Monaten zu berechnen.

Hier mein Code:
Code:
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class MonatSub {
  
    public static void main(String[] args) {
        try{
            SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
            Date date = new Date();

            GregorianCalendar cal1 = new GregorianCalendar();
            GregorianCalendar cal2 = new GregorianCalendar();
            
            date = fmt.parse("2004-11-02");
            cal1.setTime(date);
            date = fmt.parse("2005-08-03");
            cal2.setTime(date);

           //Was jetzt tun, um die Differenz in Monaten zu erhalten?

        }catch(Exception e){}
    }
}

Ich habe leider keine Funktion finden können, die mir die differenz zwischen cal1 und cal2 berechnet und mir die Anzahl der Monate ausgibt, welche dazwischen liegen.

Bitte gebt mir einen Tip wie man das in Java macht.

Danke

Bronks
 

The_S

Top Contributor
Was willst du genau? Wie viele mathematische Monate (30 Tage) die beiden Daten auseinander liegen oder wie viele Monate vergangen sind?

Für ersteres würde ich mir die Millisekunden der beiden Daten ausgeben lassen, diese dann voneinander subtrahieren und dann einfach in Monate a 30 Tage umrechnen.

Bei Zweiterem einfach das jüngere Datum bestimmen und von diesem dann immer 1 Monat abziehen bis du das Jahr und den Monat des älteren Datums erreicht hast.

Du könntest auch mal die Suchfunktion benutzen, gibt schon massig Threads zu diesem Thema!
 

Sky

Top Contributor
ganz trivial gelöst:
Code:
    int y = cal2.get(Calendar.YEAR) - cal1.get(Calendar.YEAR);
    int m = cal2.get(Calendar.MONTH) - cal1.get(Calendar.MONTH);
    int diff = y*12 + m;
 

bronks

Top Contributor
Definitiv weiß ich nur eines: Die massig Threads, die man in der Suche findet kauen immer den gleichem Mist durch, der auch in jedem kostenslosen Javabuch nachzulesen ist.

@Sky:
Danke für den Code. Den werde ich wahrscheinlich einsetzen, weil die Toleranz von +- 1 Monat bei mir keine Rolle spielt.

@All:
Hier mal ein bissl funktionierender VB-Code um das Problem nachvollziehen zu können. In PHP gibt es ebenfalls eine extra funktion dafür, die genauso funktioniert.
Code:
Dim date1 As Date
Dim date2 As Date

date1 = #10/11/2005#
date2 = #11/11/2004#

Debug.Print DateDiff("m", date2, date1)

Das richtige Ergebnis: 11 Monate.
 

Sky

Top Contributor
Code:
 SimpleDateFormat fmt = new SimpleDateFormat( "yyyy-MM-dd" );
    Date date = new Date();

    GregorianCalendar cal1 = new GregorianCalendar();
    GregorianCalendar cal2 = new GregorianCalendar();

    date = fmt.parse( "2005-10-11" );
    cal1.setTime( date );
    date = fmt.parse( "2004-11-11" );
    cal2.setTime( date );

    int y = cal2.get( Calendar.YEAR ) - cal1.get( Calendar.YEAR );
    int m = cal2.get( Calendar.MONTH ) - cal1.get( Calendar.MONTH );
    int diff = y * 12 + m;
    System.out.println( diff );

Ausgabe: 11
 

bronks

Top Contributor
@sky:
Ja ... das Datumsformat!

Korrektur: Vielen Dank für den Code, den ich danken einsetzen werde! :D
 

bronks

Top Contributor
Nein! Ich habe nur im VB das Datum falsch eingegeben. Eigentlich meinte ich das so:
Code:
...
            date = fmt.parse("2005-11-10");
            cal1.setTime(date);
            date = fmt.parse("2004-11-11");
            cal2.setTime(date);
...
Das nur 11 Monate, weil ich nur die vollen Monate zählen muß.
 

bronks

Top Contributor
OK! Ich habe es aufgegeben. Hab im Net mehrere Libs und Code gefunden. Insgesamt hat alles was ich gestern Nachmittag getestet habe nicht unter allen umständen richtig gerechnet.

Meine Lösung: Ich schicke zwei Strings mit Zeitangaben an einen inteligenten und überaus zuverlässigen SqlServer von Microsoft und dieser liefert mir das richtige Ergebnis.
 

Sky

Top Contributor
Es wäre denk ich einfacher gewesen, obige Rechnung zu verwenden und im Falle, dass Tag1 < Tag2 einen Monat abzuziehen.
 

Mag1c

Top Contributor
bronks hat gesagt.:
an einen inteligenten und überaus zuverlässigen SqlServer von Microsoft

was für eine plumpe Provokation :bae:

was willste denn nu berechnen ? Nur die ganzen Monate dazwischen, oder wie? Dann nimm das hier:

Code:
SimpleDateFormat fmt = new SimpleDateFormat( "yyyy-MM-dd" );

GregorianCalendar cal1 = new GregorianCalendar();
GregorianCalendar cal2 = new GregorianCalendar();

cal1.setTime(fmt.parse("2004-11-10"));
cal2.setTime(fmt.parse("2005-11-11"));

int diff = cal2.get(Calendar.YEAR) * 12 + cal2.get(Calendar.MONTH)
        - cal1.get(Calendar.YEAR) * 12 - cal1.get(Calendar.MONTH) - 1;

System.out.println( diff );

Gruß
Mag1c
 

Sky

Top Contributor
bronks hat gesagt.:
Code:
...
            date = fmt.parse("2005-11-10");
            cal1.setTime(date);
            date = fmt.parse("2004-11-11");
            cal2.setTime(date);
...
Das nur 11 Monate, weil ich nur die vollen Monate zählen muß.

Moment nochmal, was sind denn 'volle Monate' ? Vom 11.11.2004 bis zum 10.11.2005 sollen es 11 sein; bis zum 11.11.2005 dann 12, oder wie ?
Falls ja, siehe mein Post oben -> Vergleich auf den Tag und u.U. korrigieren.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Best Practice Die niedrigste Differenz zwischen zwei Listen ermitteln. Allgemeine Java-Themen 10
S Anwendung zum ausrechnen der Differenz von zwei Tagen Allgemeine Java-Themen 9
G Time differenz schräg Allgemeine Java-Themen 40
B Differenz als Arraylist Allgemeine Java-Themen 2
A Differenz zwischen zwei Uhrzeiten Allgemeine Java-Themen 7
I Differenz in Tagen von 2 Calendarobjekten Allgemeine Java-Themen 2
H Differenz Tage errechnen Allgemeine Java-Themen 2
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
bittedanke Wie benötigte Bits berechnen (Huffmankodierung) Allgemeine Java-Themen 7
C Koordinaten LONG/LAT eines neuen Punktes in bestimmter Entfernen und Winkel berechnen Allgemeine Java-Themen 3
ReinerCoder Kombinationsmöglichkeiten der Textfelder berechnen Allgemeine Java-Themen 14
S Mittelwert anhand eines Stream berechnen Allgemeine Java-Themen 5
MiMa Prüfziffer einer EAN Nummer berechnen Allgemeine Java-Themen 4
C Java Script Pause berechnen Allgemeine Java-Themen 5
D Kgv aller Paare aus einem Array mit n integer berechnen Allgemeine Java-Themen 5
MaxG. Best Practice Alle Kombinationen berechnen Allgemeine Java-Themen 3
Aruetiise Funktion(y = mx+n) in String speichern und berechnen Allgemeine Java-Themen 9
N Das große O berechnen Allgemeine Java-Themen 2
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
N Kombinationen beliebiger Größe berechnen Allgemeine Java-Themen 1
The Pi Anzahl der Gewichtscheiben berechnen Allgemeine Java-Themen 11
B Hirsch-Index berechnen Allgemeine Java-Themen 11
B Umfang berechnen für Polygone Allgemeine Java-Themen 18
C pplet Mitelwert Berechnen Allgemeine Java-Themen 0
J Primzahlen berechnen Allgemeine Java-Themen 13
K F-Verteilung FINV in Java berechnen Allgemeine Java-Themen 4
A Helligkeit eines Bildes berechnen Allgemeine Java-Themen 1
P Methoden Alle Kombinationen aus 2 Karten berechnen Allgemeine Java-Themen 2
C mp3-Lied Dauer berechnen Allgemeine Java-Themen 1
L Winkel eines Vektors berechnen [Anfängerprob] Allgemeine Java-Themen 5
R Threads Taskzeit berechnen Allgemeine Java-Themen 12
S Eclipse Entfernung berechnen Allgemeine Java-Themen 16
T Kreis und sekant schnittpunkt berechnen mit latitude longitude Allgemeine Java-Themen 4
B Java Diffentialgleichungen berechnen Allgemeine Java-Themen 3
W 2D-Grafik Kontrast eines Bildes berechnen Allgemeine Java-Themen 6
T Taylorpolynom berechnen Allgemeine Java-Themen 14
S Erste Schritte Mittelsenkrechte berechnen Allgemeine Java-Themen 3
P Matrix Kurtosis berechnen Allgemeine Java-Themen 40
S Werte aus 2 eindimensionale boolean arrays mithilfe von logischen operatoren berechnen Allgemeine Java-Themen 6
S Teiler Berechnen Allgemeine Java-Themen 6
Kr0e Differenzen von Bildern berechnen - Remote control Allgemeine Java-Themen 2
D md5 berechnen für BufferedImage Allgemeine Java-Themen 5
J bewegliche Feiertage berechnen Allgemeine Java-Themen 7
W Rechnungsbetrag berechnen Allgemeine Java-Themen 2
reibi Checksumme für ein File berechnen Allgemeine Java-Themen 12
M Integral berechnen Allgemeine Java-Themen 5
D Primzahlen berechnen funktioniert nicht Allgemeine Java-Themen 2
S Algorithmus um nächst folgende Primzahl zu berechnen Allgemeine Java-Themen 7
Developer_X Prozentdifferenz berechnen. Allgemeine Java-Themen 13
M Kombinationen über rekursiven Algorithmus berechnen? Allgemeine Java-Themen 10
M Monatliche Zeitspannen berechnen Allgemeine Java-Themen 3
Ark Arkussinus effizient berechnen Allgemeine Java-Themen 12
Iron Monkey Potenzzahlen mit shiftLeft berechnen? Allgemeine Java-Themen 13
N Rechenzeit berechnen? Allgemeine Java-Themen 3
H Schrifthöhe berechnen / Swing Allgemeine Java-Themen 5
T ungerade zahlen berechnen Allgemeine Java-Themen 3
X Suche Java Klasse die Feiertage berechnen kann Allgemeine Java-Themen 2
G ganzzahlige Potenz schnell berechnen Allgemeine Java-Themen 4
M Lautstärke von Audiosignal live berechnen Allgemeine Java-Themen 7
S CRC wert berechnen ergibt 0 ? Allgemeine Java-Themen 9
data89 Die Größe eines Strings in Byte berechnen? Allgemeine Java-Themen 12
T Arbeitsstunden berechnen Allgemeine Java-Themen 8
M Date Range auswerten und die Monate berechnen Allgemeine Java-Themen 2
V Setter zum Berechnen nutzen? Allgemeine Java-Themen 5
G Richtung berechnen anhand Koordinaten Allgemeine Java-Themen 3
P Dauer (Tage, Stunden, Minuten, Sekunden) berechnen Allgemeine Java-Themen 5
D Mittelwert einer Menge von Doubles berechnen Allgemeine Java-Themen 3
P Winkel berechnen. Allgemeine Java-Themen 3
0 Alle Teiler einer Zahl performant berechnen? Allgemeine Java-Themen 9
B Was würdet ihr dafür berechnen? Allgemeine Java-Themen 7
T MessageDigest von einem char[] berechnen Allgemeine Java-Themen 7
S den zweit niedrigsten wert in einem array berechnen Allgemeine Java-Themen 2
E CRC 8 Berechnen Allgemeine Java-Themen 1
M Math-String-Formel berechnen lassen Allgemeine Java-Themen 4
B Ellipsen Kreisbahnen berechnen! Allgemeine Java-Themen 11
M Alle möglichen Kombinationen von mehreren Objekten berechnen Allgemeine Java-Themen 6
clemente lanman und nt password berechnen Allgemeine Java-Themen 7
J an und bn berechnen Allgemeine Java-Themen 5
F Datum mit anzahl tagen berechnen Allgemeine Java-Themen 3
B Distance berechnen! Allgemeine Java-Themen 7
D Feiertage berechnen Allgemeine Java-Themen 8
F vergangene Zeit berechnen Allgemeine Java-Themen 6
R Zeitspannen berechnen Allgemeine Java-Themen 7
N 2 hoch 100 berechnen Allgemeine Java-Themen 8
P Punkt berechnen Allgemeine Java-Themen 4
C x-te Wurzel berechnen Allgemeine Java-Themen 2
M Formel in einem String während Laufzeit berechnen. Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben