Page 1 of 1

sec2hms in pb

Posted: Thu Jun 15, 2006 11:07 am
by z3phir2003
Code updated For 5.20+

i needed a procedure to transform seconds in h:m:s with padding 0 optional (example without padding 1:2:3 with padding 01:02:03)

if anyone has something better please feal free to post it here or make mine better or corect bugs if any

maybe someone else needs something like this so i here it is

Code: Select all

Procedure.s sec2hms(sec$,padding=1)
  hours=Int(Val(sec$)/3600)
  minutes = Int(Val(sec$) / 60) % 60
  seconds = Int(Val(sec$)) % 60 
  If padding
    If hours < 10
       hours$="0"+Str(hours)
    ElseIf hours = 0
       hours$="00"
    Else
       hours$=Str(hours)
    EndIf
    If minutes < 10
       minutes$ = "0" + Str(minutes)
    ElseIf minutes = 0
       minutes$ = "00"
    Else
       minutes$ = Str(minutes)
    EndIf  
    If seconds < 10
       seconds$ = "0" + Str(seconds)
    ElseIf seconds = 0
       seconds$ = "00"
    Else 
       seconds$ = Str(seconds)
    EndIf  
  Else
    hours$=Str(hours)
    minutes$ = Str(minutes)
    seconds$ = Str(seconds)
  EndIf
  hms$=hours$+":"+minutes$+":"+seconds$
  ProcedureReturn hms$
EndProcedure

Re: sec2hms in pb

Posted: Thu Jun 15, 2006 11:15 am
by Phoenix
If you don't mind padding then it can be done as short as this.......

Code: Select all

Procedure.s sec2hms(sec)
  ProcedureReturn FormatDate("%hh:%ii:%ss",sec)
EndProcedure
; 300 seconds = 5 minutes
Debug sec2hms(300)

Posted: Thu Jun 15, 2006 12:09 pm
by Dare
Yeta way:

Code: Select all

Procedure.s HMS(secs.l, padding.l = #True)
  Protected wrk.s
  Protected i.l
  wrk = FormatDate("%hh:%ii:%ss",secs)
  If Not padding
    wrk = ReplaceString(wrk,":0",":")
    If Left(wrk,1)="0"
      wrk = Mid(wrk,2,$0FF)
    EndIf
  EndIf
  ProcedureReturn wrk
EndProcedure

Debug HMS(0)
Debug HMS(0,#False)
Debug HMS(2)
Debug HMS(2,#False)
Debug HMS(20)
Debug HMS(20,#False)
Debug HMS(120)
Debug HMS(120,#False)
Debug HMS(1200)
Debug HMS(1200,#False)
Debug HMS(7200)
Debug HMS(7200,#False)
Debug HMS(72000)
Debug HMS(72000,#False)