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