Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Rechnen mit Zeit

Begonnen von dierk1804, Dezember 06, 2016, 13:55:38

⏪ vorheriges - nächstes ⏩

dierk1804

Hallo zusammen,
ich habe ein Problem mit meiner Abfrage. Ich berechne in einem Feld die Stunden und Minuten.
Ich habe einen Wert 8,57 den ich in 8:33 wandele also 8 Std. 33 Minuten.
Wenn die Zeit aber größer als 24 ist rechnet er falsch.
Bsp.: 29,85 ist 05:50 also die Differenz zu 24 die Ausgabe sollt aber 29:50 sein also 29 Std. 50 min. Wie kann ich meine Formel ändern dass es passt???
EZeit: Format(Summe((([Dauer imin]/1,6667)/60)/24);"Zeit, 24Std")
Für Hilfe wäre ich dankbar.

Gruß, Dierk

MzKlMu

Hallo,
das geht nicht, Access kennt kein Zeitformat >23:59:59.
Du musst die Stunden und Minuten ganz klassisch mathematisch aus den Minuten errechnen und zur Anzeige zusammensetzen.
Das Feld darf dann nicht als Uhrzeit formatiert werden, es ist ja keine Uhrzeit mehr.
Gruß Klaus

dierk1804

Hallo,

danke für die Info.   Werde alles wandeln.


Beaker s.a.

Hallo Dierk,
Hier kannst du auch noch was darüber erfahren:
http://www.donkarl.com?FAQ2.10
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Josef P.

Hallo!

Ich überschreibe für die Zeitformatierung die Format-Funktion und erweitere sie mit der Excel-Syntax [h] für Zeiten über 24 Stunden.
Auszug aus StringTools:
Public Function Format(ByVal Expression As Variant, Optional ByVal FormatString As Variant, _
              Optional ByVal FirstDayOfWeek As VbDayOfWeek = vbSunday, _
              Optional ByVal FirstWeekOfYear As VbFirstWeekOfYear = vbFirstJan1) As String

   Dim Hours As Long
   
   If Not IsDate(Expression) Then
      If IsNumeric(Expression) Then ' falls Zeitberechnung übergeben wird, ohne auf CDate zu konvertieren
        If InStr(1, Replace(FormatString, "[hh]", "[h]"), "[h]") > 0 Then
            Expression = CDate(Expression)
         End If
      End If
   End If
   
   If IsDate(Expression) Then
      If InStr(1, FormatString, "[h", vbTextCompare) > 0 Then
         Hours = Fix(Round(CDate(Expression) * 24, 1))
         If Abs(Hours) < 24 Then
            FormatString = Replace(FormatString, "[hh]", "hh", , , vbTextCompare)
            FormatString = Replace(FormatString, "[h]", "h", , , vbTextCompare)
         Else
            FormatString = Replace(FormatString, "[hh]", "[h]", , , vbTextCompare)
            FormatString = Replace(FormatString, "[h]", Replace(CStr(Hours), "0", "\0"), , , vbTextCompare)
         End If
      End If
   End If

   Format = VBA.Format$(Expression, FormatString, FirstDayOfWeek, FirstWeekOfYear)

End Function


Anwendung:
EZeit: Format(Summe((([Dauer imin]/1,6667)/60)/24);"[hh]:nn")


mfg
Josef