PDA

Vollständige Version anzeigen : Runden von Uhrzeiten


TommyK
17.10.2004, 17:06
Hallo,

heute möchte ich eine Lösung für die Frage "Wie kann ich Uhrzeiten Runden?" anbieten.
Die meisten derzeitigen Lösungen geben fast immer einen String zurück.
Ich wollte aber eine Möglichkeit schaffen mit der die Rückgabe eine Zeit (Zahl) ist.

Problemstellung:

Runden von Uhrzeiten.
Runden soll wahlweise im Sekunden-, Minuten- und Stundenbereich erfolgen.
Rückgabewert soll eine Uhrzeit (Zahl) sein.

Voraussetzungen:

Das Bsp ist unter A97, A00, AXP und A03 lauffähig.

Funktionsweise:
Die Rundung erfolgt in der Funktion "TimeRound"
Zur Berechnung wird die Funktion "RoundIt" benötigt. Diese ist enthalten, da A97 keine interne Rundungsfunktion hat. Um aber für alle
Accessversionen nur eine Bsp-DB zu zu erstellen, wurde diese Funktion beibehalten.

Syntax und Argumente:
<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Public Function</span> TimeRound(varTime <span class="TOKEN">As</span> Variant, <span class="TOKEN">Optional</span> sTyp <span class="TOKEN">As</span> <span class="TOKEN">String</span> = &quot;M&quot;, _
<span class="TOKEN">Optional</span> intTimeValue <span class="TOKEN">As</span> <span class="TOKEN">Integer</span> = 5) <span class="TOKEN">As</span> <span class="TOKEN">Double</span>
<span class="REM">'*******************************************</span>
<span class="REM">'Name: TimeRound (Function)</span>
<span class="REM">'Purpose: Runden von Uhrzeiten</span>
<span class="REM">'Author: Tommyk</span>
<span class="REM">'Date: Oktober 15, 2004, 03:40:16</span>
<span class="REM">'Calls: RoundIt</span>
<span class="REM">'Inputs: varTime = g&uuml;ltige Zeit</span>
<span class="REM">' sTyp = Rundungstyp (S=Sekunden, M=Minuten, H=Stunden)</span>
<span class="REM">' intTimeValue = Rundungswert</span>
<span class="REM">' g&uuml;ltige Werte: Sekunden=5,10,15,20,30,60</span>
<span class="REM">' Minuten=5,10,15,20,30,60</span>
<span class="REM">' Stunden=1,2,3,4,5,6,10,12</span>
<span class="REM">'Output:</span>
<span class="REM">'*******************************************</span>
&nbsp;
<span class="TOKEN">Dim</span> dblFaktor <span class="TOKEN">As</span> <span class="TOKEN">Double</span>
<span class="TOKEN">If</span> sTyp = &quot;S&quot; <span class="TOKEN">Then</span>
<span class="TOKEN">If</span> intTimeValue = 5 <span class="TOKEN">Then</span>
dblFaktor = 1 / 720
<span class="TOKEN">ElseIf</span> intTimeValue = 10 <span class="TOKEN">Then</span>
dblFaktor = 1 / 360
<span class="TOKEN">ElseIf</span> intTimeValue = 15 <span class="TOKEN">Then</span>
dblFaktor = 1 / 240
<span class="TOKEN">ElseIf</span> intTimeValue = 20 <span class="TOKEN">Then</span>
dblFaktor = 1 / 180
<span class="TOKEN">ElseIf</span> intTimeValue = 30 <span class="TOKEN">Then</span>
dblFaktor = 1 / 120
<span class="TOKEN">ElseIf</span> intTimeValue = 60 <span class="TOKEN">Then</span>
dblFaktor = 1 / 60
<span class="TOKEN">Else</span>
dblFaktor = 0
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">ElseIf</span> sTyp = &quot;M&quot; <span class="TOKEN">Then</span>
<span class="TOKEN">If</span> intTimeValue = 5 <span class="TOKEN">Then</span>
dblFaktor = 1 / 12
<span class="TOKEN">ElseIf</span> intTimeValue = 10 <span class="TOKEN">Then</span>
dblFaktor = 1 / 6
<span class="TOKEN">ElseIf</span> intTimeValue = 15 <span class="TOKEN">Then</span>
dblFaktor = 1 / 4
<span class="TOKEN">ElseIf</span> intTimeValue = 20 <span class="TOKEN">Then</span>
dblFaktor = 1 / 3
<span class="TOKEN">ElseIf</span> intTimeValue = 30 <span class="TOKEN">Then</span>
dblFaktor = 1 / 2
<span class="TOKEN">ElseIf</span> intTimeValue = 60 <span class="TOKEN">Then</span>
dblFaktor = 1
<span class="TOKEN">Else</span>
dblFaktor = 0
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">ElseIf</span> sTyp = &quot;H&quot; <span class="TOKEN">Then</span>
<span class="TOKEN">If</span> intTimeValue = 1 <span class="TOKEN">Then</span>
dblFaktor = 1
<span class="TOKEN">ElseIf</span> intTimeValue = 2 <span class="TOKEN">Then</span>
dblFaktor = 2
<span class="TOKEN">ElseIf</span> intTimeValue = 3 <span class="TOKEN">Then</span>
dblFaktor = 3
<span class="TOKEN">ElseIf</span> intTimeValue = 4 <span class="TOKEN">Then</span>
dblFaktor = 4
<span class="TOKEN">ElseIf</span> intTimeValue = 5 <span class="TOKEN">Then</span>
dblFaktor = 5
<span class="TOKEN">ElseIf</span> intTimeValue = 6 <span class="TOKEN">Then</span>
dblFaktor = 6
<span class="TOKEN">ElseIf</span> intTimeValue = 10 <span class="TOKEN">Then</span>
dblFaktor = 10
<span class="TOKEN">ElseIf</span> intTimeValue = 12 <span class="TOKEN">Then</span>
dblFaktor = 12
<span class="TOKEN">Else</span>
dblFaktor = 0
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
TimeRound = RoundIt((varTime * 24) / dblFaktor, 0) * dblFaktor / 24
<span class="TOKEN">End</span> <span class="TOKEN">Function</span>
&nbsp;</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

varTime = gültige Zeit
sTyp = Rundungstyp (S=Sekunden, M=Minuten, H=Stunden)
intTimeValue = Rundungswert
gültige Werte:
Sekunden=5,10,15,20,30,60
Minuten=5,10,15,20,30,60
Stunden=1,2,3,4,5,6,10,12

Beispiele:
Der Aufruf kann in Formularen direkt in Textfelder erfolgen oder in Abfragen (Auswahl- oder Aktualisierungsabfrage).

z.B. in Textfeldern: =TimeRound(#12:05:42#;"S";5)
würde als Ergebnis 0,503935185185185 bringen oder im Format "hh:nn:ss" 12:05:40

z.B. in Abfragen, z.B. SQL-String:
<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre>SELECT
tbl_Zeit2.Zeit1,
TimeRound([Zeit1],&quot;M&quot;,5) AS M5
FROM tbl_Zeit2
ORDER BY tbl_Zeit2.Zeit1;</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)
Würde das Feld Zeit1 aus der Tabelle tbl_Zeit2 im Feld M5 auf 5 Minuten runden.

Viel Spass mit dieser Lösung.

FW
20.10.2004, 15:37
Hallo Tommy,

ist die Funktion "RoundIt" in den Dateien enthalten?
Wenn nicht, wo finde ich diese?
Oder hab' ich nur einfach was auf den Augen?

MfG

Frank

TommyK
21.10.2004, 05:47
Hallo Frank,

die ist im Download mit enthalten.
Im Modul "mod_TimeRound" die 1. Funktion.
Die Funktion gibt es auch hier:
http://access-beispiele.tommyk-webbox.de/code/code_number.htm#number_round_dez