Formatdate

Archive.
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Formatdate

Message par Coolman »

Debug FormatDate("%hh:%ii:%ss", 3600) : ;1 heure correct
Debug FormatDate("%hh:%ii:%ss", 3600*10) : ; 10 heures correct
Debug FormatDate("%hh:%ii:%ss", 3600*20) : ; 20 heures correct
Debug FormatDate("%hh:%ii:%ss", 3600*23) : ; 23 heures correct
Debug FormatDate("%hh:%ii:%ss", 86399) : ; 23:59:59 heures correct
Debug FormatDate("%hh:%ii:%ss", 86400) : ; ???
Debug FormatDate("%hh:%ii:%ss", 3600*24) : ; ??? la derniere seconde qui coince
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

Pour moi ces résultats sont corrects ... la seconde 86400 est bien la première du deuxième jour de la période référence.

Code : Tout sélectionner

Debug FormatDate("%yy-%mm-%dd %hh:%ii:%ss", 3600) : ;1 heure correct
Debug FormatDate("%yy-%mm-%dd %hh:%ii:%ss", 3600*10) : ; 10 heures correct
Debug FormatDate("%yy-%mm-%dd %hh:%ii:%ss", 3600*20) : ; 20 heures correct
Debug FormatDate("%yy-%mm-%dd %hh:%ii:%ss", 3600*23) : ; 23 heures correct
Debug FormatDate("%yy-%mm-%dd %hh:%ii:%ss", 86399) : ; 23:59:59 heures correct
Debug FormatDate("%yy-%mm-%dd %hh:%ii:%ss", 86400) : ; ???
Debug FormatDate("%yy-%mm-%dd %hh:%ii:%ss", 3600*24) : ; ??? la derniere seconde qui coince
ou me trompe-je ?
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

C'est clair, tout est normal... On afiche jamais "24:00" pour minuit mais bien "00:00" donc forcément le jour suivant...

Dri ;)
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message par Coolman »

Je comptais utiliser formatdate pour un formatage superieur a 24 heures base sur les secondes pour un programme compteur de temps de connexion mensuel, c'est pas grave, je vais faire un algo moi meme non limité...

:)
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Dans ce cas y'a plus simple... tu ajoutes la différence de jours et le tour est joué...

Code : Tout sélectionner

OpenWindow(0, 0, 0, 320, 240, #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered, "Connexion")

Global titre.s, debut_connexion.l

debut_connexion = Date(2005, 8, 28, 14, 5, 54)

Procedure ChangeTitre(rien.l)
  Repeat
    duree = Date() - debut_connexion
    
    nb_jours = duree / 86400
    nb_heures = Val(FormatDate("%hh", duree)) + nb_jours * 24
    
    titre = "Connexion - " + Str(nb_heures) + FormatDate(":%ii:%ss", duree)
    SetWindowTitle(0, titre)
    
    Delay(1000)
  ForEver
EndProcedure

CreateThread(@ChangeTitre(), 0)

Repeat
  Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
Dri ;)
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message par Coolman »

Merci Dri, j'avoue que je n'a avais pas pensé de cette maniere, ca pourrait le faire.

j'ai egallement fait ca. ca a l'air de bien marcher sauf que la fonction FormatDate est plus rapide, je m'y attendais un peu, l'appel a cette procedure devant se faire des milliers de fois dans une boucle pour rafraichir en temps reel le temps de connexion, je me demande s'il n'y a pas moyen d'optimiser, apparement ce sont les if successifs qui ralentisssent un peu...

j'ai du utilisé une boucle de 1000 interation pour voir une difference, enlevé la ligne debug et decommenter la suivante pour tester...

;*** debut de code
Declare.s FormatSec(sec.l)

boucle.l=5
duree.l=(21*3600)+145
deb=ElapsedMilliseconds()
For i=1 To boucle
Debug FormatDate("%hh:%ii:%ss",duree)
;FormatDate("%hh:%ii:%ss",duree)
duree=duree+3600
Next i
Debug "FormatDate Effectué en : "+Str(ElapsedMilliseconds()-deb)

duree=(21*3600)+145
deb=ElapsedMilliseconds()
For i=1 To boucle
Debug FormatSec(duree)
;FormatSec(duree)
duree=duree+3600
Next i
Debug "FormatSec Effectué en : "+Str(ElapsedMilliseconds()-deb)
End

Procedure.s FormatSec(sec.l)
heure.l=sec/3600 : minute.w=(sec-(heure*3600))/60 : seconde.w=(sec-(heure*3600)-(minute*60))
hr$=Str(heure) : mn$=Str(minute) : sc$=Str(seconde)
If Len(hr$)=1 : hr$="0"+hr$ : EndIf : If Len(mn$)=1 : mn$="0"+mn$:EndIf : If Len(sc$)=1 : sc$="0"+sc$:EndIf
Format$=hr$+":"+mn$+":"+sc$
ProcedureReturn Format$
EndProcedure
;*** fin de code
Répondre