Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: dierk1804 am Dezember 06, 2016, 13:55:38

Titel: Rechnen mit Zeit
Beitrag von: dierk1804 am Dezember 06, 2016, 13:55:38
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
Titel: Re: Rechnen mit Zeit
Beitrag von: MzKlMu am Dezember 06, 2016, 14:08:02
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.
Titel: Re: Rechnen mit Zeit
Beitrag von: dierk1804 am Dezember 06, 2016, 14:11:34
Hallo,

danke für die Info.   Werde alles wandeln.

Titel: Re: Rechnen mit Zeit
Beitrag von: Beaker s.a. am Dezember 06, 2016, 17:06:14
Hallo Dierk,
Hier kannst du auch noch was darüber erfahren:
http://www.donkarl.com?FAQ2.10 (http://www.donkarl.com?FAQ2.10)
gruss ekkehard
Titel: Re: Rechnen mit Zeit
Beitrag von: Josef P. am Dezember 06, 2016, 18:40:59
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 (http://source.access-codelib.net/filedetails.php?repname=CodeLib+(Entwurf%2C+branches%2Fdraft)&path=%2Ftext%2FStringTools.bas):
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