German Stunden am besten berechnen

Wolli013

Well-Known Member
Licensed User
Longtime User
Wer kann mir helfen, bin schon seit 2 Tagen am probieren wie ich es lösen kann.
Ich bekomme es einfach nicht richtig hin.
Ist Zeit und Soll Zeit sind mir immer bekannt brauche also immer nur die Differnzzeit

Beispiele: Std : Min

7:00 ist Zeit, die Sollzeit liegt bei 8:45 = Differenzstunden - 1:45
7:15 ist Zeit, die Sollzeit liegt bei 8:45 = Differenzstunden - 1:30
7:15 ist Zeit, die Sollzeit liegt bei 5:00 = Differenzstunden +2:15
9:15 ist Zeit, die Sollzeit liegt bei 8:45 = Differenzstunden +0:30
8:45 ist Zeit, die Sollzeit liegt bei 8:45 = Differenzstunden 0:00
9:55 ist Zeit, die Sollzeit liegt bei 8:45 = Differenzstunden +1:10
10:00 ist Zeit, die Sollzeit liegt bei 8:45 = Differenzstunden +1:15
14:00 ist Zeit, die Sollzeit liegt bei 8:45 = Differenzstunden +5:15

Wie kann man so etwas am besten berechnen?
 

Wolli013

Well-Known Member
Licensed User
Longtime User
Aha, hast du dafür eventuell ein Beispiel, mit Timestamp habe ich keinerlei erfahrungen.
 

DonManfred

Expert
Licensed User
Longtime User
Ich weiss jetzt grad nicht ob mir was an infos fehlt.

Aber ganz grob würde ich vermutlich so vorgehen. Am Ende habe ich die SollMinutenzahl und die ISTMinutenzahl

B4X:
Sub ZeitAusrechnen
    DateTime.TimeFormat = "HH:mm"
    Dim nulluhr As Int = DateTime.TimeParse("00:00")
    Dim soll As Int = DateTime.TimeParse(Sollzeit.Text)
    Dim ticksoll As Int = (soll-nulluhr)/DateTime.TicksPerMinute
    Log("SollMinuten="&ticksoll)

    Dim von As Int = DateTime.TimeParse(EditVon.Text)
    Dim tickvon As Int = (von-nulluhr)/DateTime.TicksPerMinute
    Log("Von="&tickvon)
    Dim bis As Int = DateTime.TimeParse(EditBis.Text)
    Dim tickbis As Int = (bis-nulluhr)/DateTime.TicksPerMinute
    Log("Bis="&tickbis)
  
    Dim minuten As Int = tickbis-tickvon
    Log("Minuten="&minuten)
    Dim zeit As Period = DateUtils.PeriodBetween(von,bis)
    Log(zeit.Hours&":"&zeit.Minutes)
  
  
  
    'DateTime.TicksPerMinute
  
End Sub

Wobei die letzten zwei Zeilen eigentlich nur ´ne Kontrollausgabe sind :)
 

Attachments

  • ZeitrechnungGrob.zip
    7.8 KB · Views: 194

Wolli013

Well-Known Member
Licensed User
Longtime User
Habe es jetzt doch noch hinbekommen, so klappt es.
Vielen Dank nochmal!

Sub ZeitAusrechnen

DateTime.TimeFormat = "HH:mm"

Dim nulluhr As Int = DateTime.TimeParse("00:00")

' Dim soll As Int = DateTime.TimeParse(Sollzeit.Text)
' Dim ticksoll As Int = (soll-nulluhr)/DateTime.TicksPerMinute
' Log("SollMinuten="&ticksoll)

Dim von As Int = DateTime.TimeParse(EditVon.Text)
Dim tickvon As Int = (von-nulluhr)/DateTime.TicksPerMinute
Log("Von="&tickvon)
Dim bis As Int = DateTime.TimeParse(EditBis.Text)
Dim tickbis As Int = (bis-nulluhr)/DateTime.TicksPerMinute
Log("Bis="&tickbis)

Dim minuten As Int = tickbis-tickvon
Log("Minuten="&minuten)
Dim zeit As Period = DateUtils.PeriodBetween(von,bis)
Log(zeit.Hours&":"&zeit.Minutes)

Sollzeit.Text = zeit.Hours&":"&zeit.Minutes


'DateTime.TicksPerMinute

End Sub


Sub EditVon_FocusChanged (HasFocus As Boolean)
ZeitAusrechnen
End Sub
Sub EditBis_FocusChanged (HasFocus As Boolean)
ZeitAusrechnen
End Sub
Sub Sollzeit_FocusChanged (HasFocus As Boolean)
'ZeitAusrechnen
End Sub
 

DonManfred

Expert
Licensed User
Longtime User
Behandeln anstelle zu umgehen :D

B4X:
    DateTime.TimeFormat = "HH:mm"
    Dim nulluhr As Int = DateTime.TimeParse("00:00")
    Dim soll As Int = DateTime.TimeParse(Sollzeit.Text)
    Dim ticksoll As Int = (soll-nulluhr)/DateTime.TicksPerMinute
    Log("SollMinuten="&ticksoll)

    Dim von As Int = DateTime.TimeParse(EditVon.Text)
    Dim tickvon As Int = (von-nulluhr)/DateTime.TicksPerMinute
    Log("Von="&tickvon)
    Dim bis As Int = DateTime.TimeParse(EditBis.Text)
    Dim tickbis As Int = (bis-nulluhr)/DateTime.TicksPerMinute
    Log("Bis="&tickbis)
   
    Dim minuten As Int = tickbis-tickvon
    Log("Minuten="&minuten)
    Dim zeit As Period = DateUtils.PeriodBetween(von,bis)
    Log(zeit.Hours&":"&zeit.Minutes)
   
    Dim diff As Int = minuten - ticksoll
    Log("Zeitdifferenz="&diff&" Minuten")
    If diff < 0 Then
        ' Negative Zeit...  MINUS
        ' in positiven Wert wandeln
        diff = diff*-1
       
       Dim hours, minutes As Int
       hours = diff / 60
        minutes = (diff Mod 60)
        Log(NumberFormat(hours, 2, 0) & ":" & NumberFormat(minutes, 2, 0)&" im MINUS")
    Else
       Dim hours, minutes As Int
       hours = diff / 60
        minutes = (diff Mod 60)
        Log(NumberFormat(hours, 2, 0) & ":" & NumberFormat(minutes, 2, 0)&" im PLUS")
       
    End If
 
Top