- (reserviert für den aktuellsten Code aus Gründen der Übersichtlichkeit)
timecalc() »»» Zeitangaben beliebig umrechnen & ausgeben
timecalc() »»» Zeitangaben beliebig umrechnen & ausgeben
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
Hallo!
Ich möchte hier meine Prozedur vorstellen, die ich vorhin erarbeitet habe. Dabei habe ich mich von kinglestat (englisches Forum) inspirieren lassen.
Diese Prozedur soll relative Zeitanhaben mit Millisekunden (!) in beliebige Einheiten umrechnen.
Ich habe mich dabei an FormatDate() orientiert, man kann also über eine Maske bestimmen welche Werte berücksichtigt werden sollen.
Außerdem ist die Prozedur "intelligent", d. h. wenn ich 12345 habe, wandelt sie maximal in die größte angegebene Einheut um:
%sss %msms => 12s 345ms (wenn ich 2 Einheiten haben möchte)
%msms => 12345ms (wenn ich nur die Millisekunden haben will)
Je weniger Einheiten benutzt werden, desto schneller ist die Prozedur. Es stehen alle Einheiten wie bei FormatDate() und %ms zur Verfügung:
Ich möchte hier meine Prozedur vorstellen, die ich vorhin erarbeitet habe. Dabei habe ich mich von kinglestat (englisches Forum) inspirieren lassen.
Diese Prozedur soll relative Zeitanhaben mit Millisekunden (!) in beliebige Einheiten umrechnen.
Ich habe mich dabei an FormatDate() orientiert, man kann also über eine Maske bestimmen welche Werte berücksichtigt werden sollen.
Außerdem ist die Prozedur "intelligent", d. h. wenn ich 12345 habe, wandelt sie maximal in die größte angegebene Einheut um:
%sss %msms => 12s 345ms (wenn ich 2 Einheiten haben möchte)
%msms => 12345ms (wenn ich nur die Millisekunden haben will)
Je weniger Einheiten benutzt werden, desto schneller ist die Prozedur. Es stehen alle Einheiten wie bei FormatDate() und %ms zur Verfügung:
- %yy Jahre
Monate gibt es nicht, denn ein Monat kann 28-31 Tage haben - %dd Tage
- %hh Stunden
- %ii Minuten
- %ss Sekunden
- %ms Millisekunden

Code: Alles auswählen
Procedure.s timecalc(mask$, time.q) ; %yy %dd %hh %ii %ss %ms
If FindString(mask$, "%yy", 1)
Protected yy.l=time/31536000000
time-yy*31536000000
mask$=ReplaceString(mask$, "%yy", Str(yy))
EndIf
; Month cannot be calculated, because a month can have 28-31 days
If FindString(mask$, "%dd", 1)
Protected dd.l=time/86400000
time-dd*86400000
mask$=ReplaceString(mask$, "%dd", Str(dd))
EndIf
If FindString(mask$, "%hh", 1)
Protected hh.q=time/3600000
time-hh*3600000
mask$=ReplaceString(mask$, "%hh", Str(hh))
EndIf
If FindString(mask$, "%ii", 1)
Protected ii.q=time/60000
time-ii*60000
mask$=ReplaceString(mask$, "%ii", Str(ii))
EndIf
If FindString(mask$, "%ss", 1)
Protected ss.q=time/1000
time-ss*1000
mask$=ReplaceString(mask$, "%ss", Str(ss))
EndIf
If FindString(mask$, "%ms", 1)
mask$=ReplaceString(mask$, "%ms", Str(time))
EndIf
ProcedureReturn mask$
EndProcedure
Debug timecalc("Kurz: %yyy %ddd %hhh %iim %sss %msms", 34041598234)
Debug timecalc("Normal: %yy years %dd days %hh hours %ii minutes %ss seconds %ms milliseconds", 34041598234)
Debug timecalc("Abgekürzt: %yy yrs %dd days %hh hrs %ii mins %ss sec %ms msec", 34041598234)
Debug timecalc("Mathematisch: %yyy %ddd %hh:%ii'%ss''%ms'''", 34041598234)
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End