Tagesdifferenz zw. 2 Gregorian Objekten

Status
Nicht offen für weitere Antworten.
G

gdfgfd

Gast
Ich moechte die TAGESdifferenz zwischen zwei GregorianCalendar Objekten berechnen, wie geht das?
 

Scruffy

Mitglied
Hier mal die Berechnung in Minuten:

Code:
GregorianCalendar start = new GregorianCalendar();
GregorianCalendar ende = new GregorianCalendar();
start.setTime(Startzeit);
ende.setTime(Endzeit);
long diff = ((ende.getTimeInMillis()-start.getTimeInMillis()) / 1000) / 60;

Der Rest sollte eigentlich kein Problem sein.
 
G

Guest

Gast
Danke!

Aber mein Problem besteht weiter!
Es sieht so aus: Wenn heute 14 Uhr ist und ich morgen ein Datum + Uhrzeit auf 9 Uhr morgens setze, dann ist die Tagesdifferenz 0, weil ja auch kein ganzer Tag dazwischen liegt...

Demnach soll er sich einfach nur die Tage/ Monate/ Jahre ansehen und danach rechnen.

Wie geht das?
 
S

SlaterB

Gast
long diff ist die Zeit in Millisekunden,
statt in Minuten kannst du die auch in ganze Tage umrechnen,
wie das geht dürfte doch wohl klar sein, oder ist das die Frage?

wenn du dann 0.7 Tage hast, kann du das ja gerne auf 0 Tage runden
 
G

Guest

Gast
Aber das Prob liegt doch woanders!

Man stelle sich vor:

Jetzt: 23 Uhr

Morgen: 1 Uhr morgens

Dann kommt als Differenz durch das Teilen usw. etwas raus, was kleiner ist als 1, und zum runden auch nicht mehr auf 1 zu bringen ist ... An diesem Punkt soll er aber auf 1 kommen, weil der Termin MORGEN ist...

Naechste Situation:

Jetzt: 12 Uhr

Nachher: 14 Uhr

Als Zeitdifferenz kommt das gleiche raus wie oben, doch er soll es auf 0 bringen... Weil der "Termin" noch heute ist.

Also muss ich das nur anhand der Tage berechnen ... Also, ... wie geht DAS?
 
S

SlaterB

Gast
ah, nun hab ichs kapiert ;)

nun, dazu gibts nichts vorgefertigtes mehr zu berücksichtigen,
du hast ja Calendar-Objekte und fragst diese nach Tagen/ Monaten oder sonstwas ab,

für Tag 4 und Tag 5 ist die Differenz 1, subtrahieren musst du schon selber

über mehrere Monate oder gar Jahre wird das etwas schwierig wenn man etwa Anzahl Tage pro Monat/ Jahr (Schaltjahr) berücksichtigen muss,

immerhin gibt dir der Calendar noch den Tag im Jahr zurück
(siehe API für alle Möglichkeiten), falls du Tagesdifferenzen über Monatsgrenzen brauchst
 
G

Guest

Gast
Ich hatte gesehen, dass man vielleicht mit SimpleDateFormat machen koennte? Weil da kann man vielleicht ein Date erzeugen, was nur das Datum beinhaltet...
Dann berechnet man so auch wieder die differenz und erhaelt den abstand der Tage...

Aber ich weiss echt nicht wie und dachte, dass ihr so vielleicht was machen koenntet?
 
S

SlaterB

Gast
> Weil da kann man vielleicht ein Date erzeugen, was nur das Datum beinhaltet

genausogut kannst du im Calendar die Stunden, Minuten und Sekunden auf 0 setzen

oder wie gesagt direkt die Tage abfragen und subtrahieren,
dabei aber wie gesagt auf Monats- und Jahreswechsel achten,

dann ist die Differenzberechnung nach Löschen der Stunden usw. wirklich eine respektable Alternative, stimmt
 
G

Gast

Gast
Na gut, dann mach ich das jetzt mit dem Stunde auf 0 setzen...

Aber: Ich brauche ja immer ein aktuelles Gregorian-Objekt... Das hol ich mir mit new GregorianCalendar()
Das beinhaltet aber auch schon die aktuellen Stunden usw., die ich danach auch wieder auf 0 setzen muesste. Kann man das vielleicht unterbinden, dass man nur das aktuelle Datum bekommt?
 
S

SlaterB

Gast
ich denke nicht, ist doch schnell gemacht, evtl. in einer statischen Operation versteckt,
wenn es das irgendwo gäbe, dann würde es dort in der API genauso ablaufen,
was macht das groß für einen Unterschied?
 
G

Guest

Gast
Meine Methode sieht jetzt so aus:

Code:
  public long getRemainingDays (  ) {
    // Returns the time between now and the appointment in days
    GregorianCalendar gcNow = new GregorianCalendar();
    gcNow.set(Calendar.HOUR_OF_DAY, 0);
    gcNow.set(Calendar.MINUTE, 0);
    gcNow.set(Calendar.SECOND, 0);
    gcNow.set(Calendar.MILLISECOND, 0);
    
    GregorianCalendar gcAppointment = new GregorianCalendar(getYear(), getMonth() - 1, getDay());

    //  Datum hat schon alle Zeitlichen Angaben auf 0
    //  gcAppointment.set(Calendar.HOUR_OF_DAY, 0);
    //  gcAppointment.set(Calendar.MINUTE, 0);
    //  gcAppointment.set(Calendar.SECOND, 0);
    //  gcAppointment.set(Calendar.MILLISECOND, 0);

    double dobDifference = ((double) (gcAppointment.getTimeInMillis() - gcNow.getTimeInMillis())) / 24 / 60 / 60 / 1000;
    
    System.out.println(dobDifference);
    
    return (long) dobDifference;
  }

** Zum testen setzt ihr einfach fuer gcAppointment das Datum ein, zu dem zu heute der Abstand gemessen werden soll **

Üroblem: Ich hab bis 5 Tagen Diff. kein Prob, aber ab 6 Tagen kommt fuer dobDifference ein Wert von 5,99732328 oder so aehnlich raus und demnach rundet er ab auf 5 ... also ist es falsch ... runden kann ich auch nicht, weil es sonst unsicher wird bei laengeren abstaenden...

also was kann ich machen?
 
S

SlaterB

Gast
addiere 12 Stunden drauf (0.5 Tage) bevor du abrundest,

so hast du auch kein Problem, wenn Java dir wegen Sommer/ Winterzeit mal 5.1 oder 4.9 Tage ausrechnet mit einer echten Abweichung von einer Stunde (ist weniger als 0.1 Tage, ich weiß)

und schreibe

double dobDifference = (gcAppointment.getTimeInMillis() - gcNow.getTimeInMillis()) / MILLI_FOR_DAY;
mit einer static double Konstante MILLI_FOR_DAY

statt
double dobDifference = ((double) (gcAppointment.getTimeInMillis() - gcNow.getTimeInMillis())) / 24 / 60 / 60 / 1000;
 
G

Guest

Gast
Gut, ich habs so gelassen.
Selbst mit einer Differenz von 10 Jahren kommt er immer auf x.9564364 ...

Demnach hab ich jetzt einfach nur noch das Runden eingefuegt und es bis auf 30 Tage Zeitdifferenz erfolgreich getestet.

Code:
  public long getRemainingDays (  ) {
    // Returns the time between now and the appointment in days
    GregorianCalendar gcNow = new GregorianCalendar();
    gcNow.set(Calendar.HOUR_OF_DAY, 0);
    gcNow.set(Calendar.MINUTE, 0);
    gcNow.set(Calendar.SECOND, 0);
    gcNow.set(Calendar.MILLISECOND, 0);
    
    GregorianCalendar gcAppointment = new GregorianCalendar(getYear(), getMonth() - 1, getDay());

    //  Datum hat schon alle Zeitlichen Angaben auf 0
    //  gcAppointment.set(Calendar.HOUR_OF_DAY, 0);
    //  gcAppointment.set(Calendar.MINUTE, 0);
    //  gcAppointment.set(Calendar.SECOND, 0);
    //  gcAppointment.set(Calendar.MILLISECOND, 0);

    return Math.round(((double) (gcAppointment.getTimeInMillis() - gcNow.getTimeInMillis())) / 24 / 60 / 60 / 1000);
  }

Danke sehr!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Zwei Dates subtrahieren für die Tagesdifferenz? Allgemeine Java-Themen 7
A Datentypen Gregorian Calendar - 2 Daten sind gleich?? Allgemeine Java-Themen 3
L Gregorian Calender falsches Datum Allgemeine Java-Themen 2
A Jahresüberschlag bei Gregorian Calendar Allgemeine Java-Themen 3
B OOP Kommunikation zwischen Objekten? Allgemeine Java-Themen 5
Zrebna Wieso sollte man Null-Prüfungen nicht mit Optional-Objekten nutzen? Allgemeine Java-Themen 13
B Sent and Receive Funktionen zwischen Objekten ermöglichen? Allgemeine Java-Themen 8
A Objekt aus anderen Objekten machen Allgemeine Java-Themen 8
PCOmega137 Objekten zufällig erzeugte Namen geben Allgemeine Java-Themen 2
T Speichern von Objekten Allgemeine Java-Themen 2
D Serialisierung und Deserialisierung von Objekten - Frageprogramm Allgemeine Java-Themen 4
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
M loeschen von objekten Allgemeine Java-Themen 22
S Parametrisierte jUnit 5-Tests mit eigenen Datentypen/Klassen-Objekten als Test-Parameter Allgemeine Java-Themen 0
F Best Practice Große Anzahl an Objekten speichern und lesen Allgemeine Java-Themen 19
M Array aus Thread Objekten erstellen Allgemeine Java-Themen 2
K Vergleich von Strings von Objekten Allgemeine Java-Themen 4
B Endlosschleife beim Verteilen von Objekten Allgemeine Java-Themen 4
L Von ArrayList abgeleitete Klasse nur mit bestimmten Objekten füllen Allgemeine Java-Themen 1
D Verwaltung von sehr vielen Objekten Allgemeine Java-Themen 12
G problem: array aus objekten Allgemeine Java-Themen 10
H Liste von Objekten generisch sortieren Allgemeine Java-Themen 0
S Zur Laufzeit Klasse mit einer anzahl von X Objekten erstellen Allgemeine Java-Themen 5
B OOP Auf Zustandsänderungen von Objekten reagieren Allgemeine Java-Themen 2
H Best Practice zu vielen konstanten Objekten? Allgemeine Java-Themen 10
M 3D-Grafik Probleme beim drehen von Objekten Allgemeine Java-Themen 9
A Sinnvolles Software Design bei Eigenschaftsänderungen von Objekten Allgemeine Java-Themen 7
J Java-Implementierung diverser Beziehungen zwischen Klassen bzw. Objekten Allgemeine Java-Themen 2
S Threads Liste mit Objekten in Teillisten zerlegen und abarbeiten Allgemeine Java-Themen 3
P J-Unit vergleich von 2 Objekten merkwürdig Allgemeine Java-Themen 7
Landei Guice - Injection von "zwischendurch" erzeugten Objekten Allgemeine Java-Themen 4
S Sortieren nach Objekten Allgemeine Java-Themen 13
T Liste mit GregorianCalendar-Objekten in List einlesen, mit Collection sortieren und ausgeben Allgemeine Java-Themen 3
D Von mehreren Objekten eine Eigenschaft abfragen Allgemeine Java-Themen 11
G Array mit neuen Objekten der selben Klasse füllen Allgemeine Java-Themen 2
S Eine Collection von Objekten mit LDAP Syntax filtern Allgemeine Java-Themen 5
M Schnittmenge von Objekten Allgemeine Java-Themen 3
N Performates lesen von Objekten aus Dateien Allgemeine Java-Themen 2
hdi Speichergröße von Objekten & Referenzen Allgemeine Java-Themen 8
hdi JTable: Sortierung von Date-Objekten Allgemeine Java-Themen 4
C ArrayList (mit Objekten) sortieren Allgemeine Java-Themen 12
C TreeSet mit Objekten befüllen Allgemeine Java-Themen 12
L Lesen von Objekten aus Datei Allgemeine Java-Themen 17
S Liste mit verschiedenden Objekten Allgemeine Java-Themen 15
I Vector mit Objekten sortieren,Videos mit JMF wiedergeben Allgemeine Java-Themen 6
J ArrayList aus Point-Objekten nach dem x-Wert ordnen Allgemeine Java-Themen 2
T abspeichern und laden von objekten in JFrame Allgemeine Java-Themen 2
G Serialisieren von Objekten : IO Exception beim Schreiben Allgemeine Java-Themen 3
G Kompletten Frame mit allen Objekten resizen Allgemeine Java-Themen 10
M Endgültiges Löschen von Objekten Allgemeine Java-Themen 7
M Problem mit Objekten Allgemeine Java-Themen 11
B Serialisieren von mehreren Objekten Allgemeine Java-Themen 7
W Threads & Pipes --> Ist eine Übergabe von Objekten mö Allgemeine Java-Themen 7
T casten von Objekten aus einer ArrayList Allgemeine Java-Themen 4
O kommunikation zw. objekten Allgemeine Java-Themen 7
G List mit selbstdefinierten Objekten sortieren Allgemeine Java-Themen 2
T Unabhängigkeit von Variablen/ Objekten. Allgemeine Java-Themen 6
M String aus array mit Objekten suchen Allgemeine Java-Themen 26
F Array von Objekten Allgemeine Java-Themen 2
B Darstellung von Objekten dauern unterschiedlich lang ! Allgemeine Java-Themen 5
G hashtable mit objekten Allgemeine Java-Themen 9
G Probleme mit Clonen von Objekten die JComponents enthalten Allgemeine Java-Themen 3
M Alle möglichen Kombinationen von mehreren Objekten berechnen Allgemeine Java-Themen 6
D OOP-Style bei Objekten Allgemeine Java-Themen 35
H Speicher freigeben klappt nicht bei Image Objekten, warum? Allgemeine Java-Themen 8
m@nu Programm-Models in Static-Objekten speichern Allgemeine Java-Themen 5
T Problem mit Zuweisung von Objekten Allgemeine Java-Themen 5
K Ordner/Dateistruktur in Objekten nachbilden Allgemeine Java-Themen 6
C Uebergabe von Objekten nach anklicken von JCheckBox Allgemeine Java-Themen 5
B Array von Objekten Allgemeine Java-Themen 3
W Mit Date-Objekten arbeiten Allgemeine Java-Themen 10
C Sichbarkeit von Objekten / Methoden in verschiedenen Files Allgemeine Java-Themen 7
S Sortieren Von Objekten Nach Attribut Allgemeine Java-Themen 6
lhein Übergabe von Objekten von Java an C über JNI Allgemeine Java-Themen 5

Ähnliche Java Themen


Oben