Differenz zweier Daten in Tage bei Kotlin

  • Antworten:6
  • Bentwortet
Robbiani Renato
  • Forum-Beiträge: 602

14.04.2021, 10:59:49 via Website

Hallo zusammen

Ich bilde mich in Kotlin weiter. Dazu habe ich ein kleine App welche die Differenz zweier Daten in Tage zurück gibt.

Gegeben sind zwei DatePicker Objekte

private var cal1 = Calendar.getInstance()
private var cal2 = Calendar.getInstance()

cal1 ist der Anfang und cal2 das ende der beiden Daten. Im Beispiel werden die Tage in einer While-Schleife hochgezählt.

var days = 0
    while (cal1[Calendar.YEAR] != cal2[Calendar.YEAR] || cal1[Calendar.MONTH] != cal2[Calendar.MONTH] || cal1[Calendar.DAY_OF_MONTH] != cal2[Calendar.DAY_OF_MONTH]){
        days++
        cal1.add(Calendar.DAY_OF_MONTH, 1)
    }

Mich befriedigt diese Lösung nicht. Darum suche ich nach einer Eleganteren Lösung. Aber folgendes ergibt aber immer nur 1.

var tage = cal2.time.time - cal1.time.time

Ist die Schleife wirklich die beste Lösung oder gibt es eine elegantere?

Gruss Renato

Kommentieren
Jokel
  • Forum-Beiträge: 1.527

14.04.2021, 11:44:40 via Website

Ich würde mir mal die Kalender pDoku anschauen.
https://developer.android.com/reference/java/util/Calendar

Und villeicht compareTo benutzen ergebnis ist dann in milli sec.

— geändert am 14.04.2021, 15:58:57

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.527

14.04.2021, 15:42:01 via Website

Hallo eigentlich hätte dein Code auch gehen müssen.
Das da immer 1 rauskommt liegt daran das du beide Kalender in kurzen abstand initialisierst somit ist die System Uhr nur wenige millisek wieder. Die Kalender sind nur millsek unterschiedlich.
Mei mir kommt sogar 0 raus denn die beiden Kalender sind gleich.

setze mal einen Kalender auf eine andere Zeit zum Testen.
cal1.set(2021,1,2,10,12)

Das Ergebnis ist ja noch in millisek das kannst du dann auch mit Rafael K. Code in Tage umrechnen.

— geändert am 14.04.2021, 17:31:29

Hilfreich?
Kommentieren
Robbiani Renato
  • Forum-Beiträge: 602

14.04.2021, 17:14:19 via Website

Ciao Rafael

Danke für die schnelle Antwort. Aber wenn ich es so mache

     val start = cal1.time
    val ende = cal2.time
    var tage = abs(ende.time - start.time) / java.util.concurrent.TimeUnit.DAYS.toMillis(1)

dann haben start und ende immer das aktuelle Datum. Ich setze aber in cal1 und cal2 das Datum. Aber irgend wie kriege ich es nicht mehr raus.

   private fun updateCalendarFromDatePicker(cal: Calendar, dp: DatePicker) {
    cal[Calendar.YEAR] = dp.year
    cal[Calendar.MONTH] = dp.month
    cal[Calendar.DAY_OF_MONTH] = dp.dayOfMonth
}

}

Wie komme ich zum gesetzten Datum. So wie ich es gemacht habe geht es auf jeden Fall nicht.

Gruss Renato

Hilfreich?
Kommentieren
Robbiani Renato
  • Forum-Beiträge: 602

14.04.2021, 17:28:40 via Website

Problem gelöst. In der While Schleife zähle ich das Datum hoch. Darum haben beide Variablen immer dasselbe Datum. Ich lese nun cal1 neu ein und schon wird das richtige Resultat angezeigt.

Danke für eure Hilfe.

Gruss Renato

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.527

14.04.2021, 18:32:33 via Website

sorry

— geändert am 14.04.2021, 19:22:30

Hilfreich?
Kommentieren