Hallo!
Eigentlich ist das eine leichte Aufgabe oder doch nicht?
Ich versuche die Zeit zwischen zwei Datum/Uhrzeit Angaben zu berechnen. Im Forum gibt es reichlich Posts zu dem Thema und deshalb dachte ich, die Lösung ist klar:
Offenbar ist es mir nicht klar ... Der Output ist:
In allen fünf Fällen sollte als Ergebnis (Diff: 1000, also 1 Sekunde) herauskommen. Sobald die Zeitabfrage aber über eine Monats- oder Jahresgrenze geht, kommt Unsinn raus.
Kann mir einer auf die Sprünge helfen, was ich hier falsch mache? Auch Schaltjahre und Sommer/Winterzeit spielen hier eine Rolle.
Wosl
Eigentlich ist das eine leichte Aufgabe oder doch nicht?
Ich versuche die Zeit zwischen zwei Datum/Uhrzeit Angaben zu berechnen. Im Forum gibt es reichlich Posts zu dem Thema und deshalb dachte ich, die Lösung ist klar:
B4X:
Sub Activity_Create (FirstTime As Boolean)
Dim xZeitGap As Double
Log ("In a month:")
xZeitGap = CalcDiffTime2 ("13.10.2024", "23:59:59", "14.10.2024", "00:00:00")
Log (" ")
Log ("Cross month:")
xZeitGap = CalcDiffTime2 ("31.10.2024", "23:59:59", "01.11.2024", "00:00:00")
Log (" ")
Log ("Cross month (other choice):")
xZeitGap = CalcDiffTime2 ("30.09.2024", "23:59:59", "01.10.2024", "00:00:00")
Log (" ")
Log ("Cross month (leap year):")
xZeitGap = CalcDiffTime2 ("29.02.2024", "23:59:59", "01.03.2024", "00:00:00")
Log (" ")
Log ("Cross year:")
xZeitGap = CalcDiffTime2 ("31.12.2023", "23:59:59", "01.01.2024", "00:00:00")
Log ("Job done")
KillApp
End Sub
Sub CalcDiffTime2 (cDate1 As String, cTime1 As String, cDate2 As String, cTime2 As String) As Double
Private iStartTime As Long, iEndTime As Long
Private t As Long
Dim DiffHours As Double
Log ("Date from: " & cDate1 & "; Time from: " & cTime1)
Log ("Date to: " & cDate2 & "; Time to: " & cTime2)
DateTime.DateFormat = "DD.mm.yyyy"
DateTime.TimeFormat = "HH:mm:ss"
iStartTime = DateTime.DateTimeParse(cDate1,cTime1)
iEndTime = DateTime.DateTimeParse(cDate2,cTime2)
Log ("iStartTime: " & iStartTime & "; iEndTime: " & iEndTime)
t = iEndTime - iStartTime
Log ("Diff: " & t)
DiffHours = t / (1000.0 * 60.0 * 60.0)
Return DiffHours
End Sub
Offenbar ist es mir nicht klar ... Der Output ist:
B4X:
In a month:
Date from: 13.10.2024; Time from: 23:59:59
Date to: 14.10.2024; Time to: 00:00:00
iStartTime: 1705187399000; iEndTime: 1705187400000
Diff: 1000
Cross month:
Date from: 31.10.2024; Time from: 23:59:59
Date to: 01.11.2024; Time to: 00:00:00
iStartTime: 1706742599000; iEndTime: 1704064260000
Diff: -2678339000
Cross month (other choice):
Date from: 30.09.2024; Time from: 23:59:59
Date to: 01.10.2024; Time to: 00:00:00
iStartTime: 1706656139000; iEndTime: 1704064200000
Diff: -2591939000
Cross month (leap year):
Date from: 29.02.2024; Time from: 23:59:59
Date to: 01.03.2024; Time to: 00:00:00
iStartTime: 1706569319000; iEndTime: 1704063780000
Diff: -2505539000
Cross year:
Date from: 31.12.2023; Time from: 23:59:59
Date to: 01.01.2024; Time to: 00:00:00
iStartTime: 1675206719000; iEndTime: 1704063660000
Diff: 28856941000
Job done
In allen fünf Fällen sollte als Ergebnis (Diff: 1000, also 1 Sekunde) herauskommen. Sobald die Zeitabfrage aber über eine Monats- oder Jahresgrenze geht, kommt Unsinn raus.
Kann mir einer auf die Sprünge helfen, was ich hier falsch mache? Auch Schaltjahre und Sommer/Winterzeit spielen hier eine Rolle.
Wosl