Page 1 sur 2
Heure courante dans une chaîne de caractère
Publié : dim. 18/juin/2017 11:20
par PCPixMusic
Bonjour, voilà des jours que je cherche, donc mettre l'heure courante dans une chaîne de caractère, sans trouver de réponse.
J'aimerais par exemple faire :
Global Jour.i,Mois.i,Annee.i
Jour = CopieDate(1)
Mois = CopieDate(2)
Annee = CopieDate(3)
CopieDate() serait une fonction qui renvoie le jour, le mois ou l'année courante, en fonction du numéro d'index entre ().
Je trouve toutes les fonctions sur les heures et la date bien complexe, je n'ai également pas trouvé quelque chose qui répond à mes attentes. Beaucoup de fonctions renvoient un résultat en secondes avec des écarts etc, ce n'est pas très pratique.
Merci d'avance pour vos réponses.
Passez toutes et tous un très bon dimanche.
Re: Heure courante dans une chaîne de caractère
Publié : dim. 18/juin/2017 11:46
par case
Debug Str(Day(Date()))+"/"+Str(Month(Date()))+"/"+Str(Year(Date()))+" - "+Str(Hour(Date()))+":"+Str(Minute(Date()))+":"+Str(Second(Date()))
Re: Heure courante dans une chaîne de caractère
Publié : dim. 18/juin/2017 12:13
par Ar-S
En prenant le code de case, tu peux te créer une proce de ce genre :
Code : Tout sélectionner
Procedure.s DateToString(MODE_DATE=0)
Select MODE_DATE
Case 1 ; date
ladate.s = Str(Day(Date()))+"/"+Str(Month(Date()))+"/"+Str(Year(Date()))
Case 2 ; heure
ladate.s = Str(Hour(Date()))+":"+Str(Minute(Date()))+":"+Str(Second(Date()))
Default ; date + heure
ladate.s = Str(Day(Date()))+"/"+Str(Month(Date()))+"/"+Str(Year(Date()))+" - "+Str(Hour(Date()))+":"+Str(Minute(Date()))+":"+Str(Second(Date()))
EndSelect
ProcedureReturn ladate.s
EndProcedure
DateComplete.s = DateToString()
dateseule.s = DateToString(1)
heureseule.s = DateToString(2)
Debug DateComplete.s
Debug dateseule.s
Debug heureseule.s
Je te conseils aussi l'utilisation des "Bind" si tu comptes afficher la date. ça évite les freezes en cas de déplacement de fenêtre.
Code : Tout sélectionner
Procedure.s DateToString(MODE_DATE=0)
Select MODE_DATE
Case 1 ; date
ladate.s = Str(Day(Date()))+"/"+Str(Month(Date()))+"/"+Str(Year(Date()))
Case 2 ; heure
ladate.s = Str(Hour(Date()))+":"+Str(Minute(Date()))+":"+Str(Second(Date()))
Default ; date + heure
ladate.s = Str(Day(Date()))+"/"+Str(Month(Date()))+"/"+Str(Year(Date()))+" - "+Str(Hour(Date()))+":"+Str(Minute(Date()))+":"+Str(Second(Date()))
EndSelect
ProcedureReturn ladate.s
EndProcedure
Procedure AfficheHeure()
SetGadgetText(1, DateToString() )
EndProcedure
If OpenWindow(0, 0, 0, 160, 40, "Exemple...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
StringGadget (1, 5, 1, 150, 30, "",#ES_CENTER|#PB_String_ReadOnly)
SetGadgetText(1, DateToString() )
AddWindowTimer(0,10,1000)
BindEvent(#PB_Event_Timer,@AfficheHeure(),0)
Repeat
Event = WaitWindowEvent()
; Select Event : EndSelect
Until Event = #PB_Event_CloseWindow
EndIf
Re: Heure courante dans une chaîne de caractère
Publié : dim. 18/juin/2017 21:34
par PCPixMusic
Bonjour et merci beaucoup à tous les deux.
Pour mon besoin, j'ai choisi la solution de case avec seulement un "Str(Day(Date()))+"/"+Str(Month(Date()))+"/"+Str(Year(Date()))Str(Day(Date()))+"/"+Str(Month(Date()))+"/"+Str(Year(Date()))
Car j'avais uniquement besoin de l'affichage de la date du jour, pour afficher par défaut la date d'examen pour des courbes graphiques de biorythme.
C'était en fais très simple. Merci également à Ar-S, pour son code super pratique !
Merci encore et passez une très bonne soirée.

Re: Heure courante dans une chaîne de caractère
Publié : lun. 19/juin/2017 14:17
par Mesa
Purebasic a une fonction pour cela :
https://www.purebasic.com/french/docume ... tdate.html
Note: Le temps et les dates supportées vont de '1970-01-01, 00:00:00' pour le minimum à '2038-01-19, 03:14:07' pour le maximum.
Code : Tout sélectionner
Procedure.s FormatDateEx(MODE_DATE=0)
Protected ladate.s
Select MODE_DATE
Case 1 ; date
ladate = FormatDate("%dd/%mm/%yyyy", Date())
Case 2 ; heure
ladate = FormatDate("%hh:%ii:%ss", Date())
Default ; date + heure
ladate =FormatDate("%dd/%mm/%yyyy", Date()) + " - " + FormatDate("%hh:%ii:%ss", Date())
EndSelect
ProcedureReturn ladate
EndProcedure
DateComplete.s = FormatDateEx()
dateseule.s = FormatDateEx(1)
heureseule.s = FormatDateEx(2)
Debug DateComplete
Debug dateseule
Debug heureseule
D$=FormatDate("%dd %mm %yyyy", Date())
Debug D$
M.
Re: Heure courante dans une chaîne de caractère
Publié : mar. 20/juin/2017 20:02
par PCPixMusic
Bonjour Mesa,
Merci beaucoup, mais j'avais déjà ces fonctions, mais je n'avais absolument rien compris à cette histoire de secondes écouler depuis le "1970-01-01, 00:00:00", je pensais qu'il fallait écrire des calcules complexes pour avoir la date du jour, à cause de l'explication de la documentation qui parle des secondes écouler depuis justement ce "1970-01-01, 00:00:00".
Comme je suis en France et que je vais donc utiliser les formats de dates et d'heures de notre pays.
La chaîne de caractère de Case : Str(Day(Date()))+"/"+Str(Month(Date()))+"/"+Str(Year(Date()))+" - "+Str(Hour(Date()))+":"+Str(Minute(Date()))+":"+Str(Second(Date())) est beaucoup simple à comprendre pour moi et m'a permis du 1er coup d'afficher simplement la date système du jour, dont j'avais besoin.
Ar-S : Comment as-tu afficher le cadre dans la fenêtre de l'heure de ton code ? Je ne vois pas de fonction pour mettre un cadre dans une fenêtre.
Voici la portion de code avec la date du jour, j'ai eu besoin de faire l'ajout du 0 pour les mois de 1 à 9, car par exemple,
sinon ça affiche le 10/6/2017, donc avec mon petit code j'ai bien le 10/06/2017. ^^
Code : Tout sélectionner
If Str(Month(Date())) = "1" : Mois_Actuel = "01"
ElseIf Str(Month(Date())) = "2" : Mois_Actuel = "02"
ElseIf Str(Month(Date())) = "3" : Mois_Actuel = "03"
ElseIf Str(Month(Date())) = "4" : Mois_Actuel = "04"
ElseIf Str(Month(Date())) = "5" : Mois_Actuel = "05"
ElseIf Str(Month(Date())) = "6" : Mois_Actuel = "06"
ElseIf Str(Month(Date())) = "7" : Mois_Actuel = "07"
ElseIf Str(Month(Date())) = "8" : Mois_Actuel = "08"
ElseIf Str(Month(Date())) = "9" : Mois_Actuel = "09" : EndIf
StringGadget(#Date_Examen ,150,30,100,20,Str(Day(Date()))+"/"+Mois_Actuel+"/"+Str(Year(Date())))
Re: Heure courante dans une chaîne de caractère
Publié : mer. 21/juin/2017 6:26
par Micoute
Pourquoi n'utilises-tu pas la fonction RSet() ?
Par exemple :
Re: Heure courante dans une chaîne de caractère
Publié : mer. 21/juin/2017 7:39
par Zorro
oui je te conseille de bien regarder attentivement les fonctions proposé dans la librairie "String" de Purebasic
il existe pas mal de petites fonctions bien utiles
pis si tu coinces, on en a d'autre en stock

Re: Heure courante dans une chaîne de caractère
Publié : mer. 21/juin/2017 7:48
par Marc56
La chaîne de caractère de Case : Str(Day(Date()))+"/"+Str(Month(Date()))+"/"+Str(Year(Date()))+" - "+Str(Hour(Date()))+":"+Str(Minute(Date()))+":"+Str(Second(Date())) est beaucoup simple à comprendre pour moi et m'a permis du 1er coup d'afficher simplement la date système du jour, dont j'avais besoin.

« Simplement » (sic)
Simplement
1/1/1970 parce que c'est un mode de datation informatique.
Même si à l'origine c'est un mode unix, la plupart des langages de programmation se basent sur ce « point de départ »
Epoch et
Heure Unix
FormatDate() a son opposé ParseDate() qui transforme une date chaine en date numérique (nb de secondes depuis 1/1/1970)
Les deux sont utiles pour travailler avec les gadgets DateGadget() et CalendarGadget() afin de définir une date à afficher ou récupérer la saisie utilisateur.

Re: Heure courante dans une chaîne de caractère
Publié : mer. 21/juin/2017 8:30
par Ollivier
PCPixMusic a écrit :Merci beaucoup, mais j'avais déjà ces fonctions, mais je n'avais absolument rien compris
à cette histoire de secondes écouler depuis le "1970-01-01, 00:00:00", je pensais qu'il
fallait écrire des calcules complexes pour avoir la date du jour, à cause de l'explication de
la documentation qui parle des secondes écouler depuis justement ce "1970-01-01,
00:00:00".
<< écouler >> s'accorde et donne << écoulées >>
<< calcules >> ne s'accorde pas autant et donne << calculs >>.
Cela peut te donner une idée de la difficulté que ça donne de créer une doc.
Maintenant, avec ou sans petites erreurs, toute suggestion d'explication peut être bonne à prendre et enrichir la doc.
Rassure-toi, je semble faire l'apôtre de la pédagogie, mais je viens de prendre un sérieux échec par mail en me rendant compte que je pouvais négliger l'ignorance de l'autre.
Aussi, j'ai déjà été plus humiliant avec Mesa, sans même m'excuser. Mais quand même, passé ce truc de "je fais un truc de France parce que je suis de France" (là aussi je suis passé par là), Mesa a offert plusieurs utilisations à FormatDate(). Ce n'est pas une histoire de France ou pas France, c'est une histoire de combinaison de caractères.
Par exemple :
ça te donne ce que tu veux, me semble-t-il.
Bon courage à toi.
Re: Heure courante dans une chaîne de caractère
Publié : mer. 21/juin/2017 15:33
par pierre003
Bonjour a toutes et a tous,
Je débute et c’est vrai que je n’ai pas tout compris des codes affichés, je me suis lancé dans l’affichage des dates, avec la date actuelle, ce n’est surement pas optimisé mais je tente de m’améliorer.
Deux questions aux spécialistes :
-J’ai fait des tableaux pour les jours (jr(x)) et mois (ms(x)) mais peut être qu’ils existent déjà ?
-Je souhaiterai afficher les phases de la lune (ex : nouvelle lune code 127761) mais je n’ai pas tout compris pour le codage Unicode, et je crois que Purebasic s’arrête vers les 65000 mais ?
J'espère que le code fonctionnera chez vous.
Bonne journée.
Code : Tout sélectionner
Dim jr.s(6)
Dim ms.s(12)
jr(0)= "Dimanche"
jr(1)= "Lundi"
jr(2)= "Mardi"
jr(3)= "Mercredi"
jr(4)= "Jeudi"
jr(5)= "Vendredi"
jr(6)= "Samedi"
ms(1)="Janvier"
ms(2)="Février"
ms(3)="Mars"
ms(4)="Avril"
ms(5)="Mai"
ms(6)="Juin"
ms(7)="Juillet"
ms(8)="Août"
ms(9)="Septembre"
ms(10)="Octobre"
ms(11)="Novembre"
ms(12)="Décembre"
chain.s
Dat=Date()
Debug "La date actuelle :"
Debug "Numérique : " + Dat
Debug "Formatée 1 : " + FormatDate("%dd/%mm/%yyyy", Dat)
Debug "Formatée 2 : " +FormatDate("%dd/%mm/%yyyy %hhh %iimn %sss", Dat)
Debug "Formatée avec jours et mois :" + jr(DayOfWeek(Dat))+ " " + FormatDate("%dd ", Dat) + ms(Month(Dat)) + FormatDate(" %yyyy", Dat)
chain = jr(DayOfWeek(Dat))+ " " + FormatDate("%dd ", Dat) + ms(Month(Dat)) + FormatDate(" %yyyy", Dat)
Debug "Transformée en texte = " + chain
If Day(Dat)= <10
chain = "0" + Str(Day(Dat))
Else
chain = Str(Day(Dat))
EndIf
chain + "/"
If Month(Dat) <10
chain +"0" + Str(Month(Dat))
Else
chain + Str(Month(Dat))
EndIf
chain + "/" + Str(Year(Dat))
Debug "Transformée en texte Mois et jours 0x= " + chain
Re: Heure courante dans une chaîne de caractère
Publié : mer. 21/juin/2017 15:57
par Ar-S
PCPixMusic a écrit :Ar-S : Comment as-tu afficher le cadre dans la fenêtre de l'heure de ton code ? Je ne vois pas de fonction pour mettre un cadre dans une fenêtre.
Je n'ai pas de cadre, c'est le stringgadget() qui s'affiche ainsi.
Re: Heure courante dans une chaîne de caractère
Publié : mer. 21/juin/2017 16:00
par Marc56
pierre003 a écrit :
-J’ai fait des tableaux pour les jours (jr(x)) et mois (ms(x)) mais peut être qu’ils existent déjà ?
Non, car il faudrait en faire un pour chaque langue (ou alors puiser dans les API de l'os hôte)
Par contre on peut utiliser le « couteau à saucisson » :
StringField (équivalent de split dans d'autres langages)
pour gagner des lignes.
Exemple très aéré
(montre aussi qu'on peut couper des lignes en PB (après + et ,)
Code : Tout sélectionner
Str_Days.s = "Dimanche,Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi"
Str_Months.s = "Janvier,Février,Mars,Avril,Mai,Juin,Juillet,Août,Septembre,Octobre,Novembre,Décembre"
Dat = Date()
Stamp.s = StringField(Str_Days, DayOfWeek( Dat ), ",") +
" " +
Day( Dat ) +
" " +
StringField(Str_Months, Month( Dat ), ",") +
" " +
Year( Dat )
Debug Stamp ; => Mardi 21 Juin 2017
pierre003 a écrit : -Je souhaiterai afficher les phases de la lune (ex : nouvelle lune code 127761) mais je n’ai pas tout compris pour le codage Unicode, et je crois que Purebasic s’arrête vers les 65000 mais ?
65000 c'est le nombre de caractères que peut contenir une fonte unicode.
Il faut choisir une fonte qui contient ton symbole et donner son code dans la bonne base (décimale ou hexa etc)
La limite des variables est là:
Variables, Types et Opérateurs

Re: Heure courante dans une chaîne de caractère
Publié : sam. 24/juin/2017 10:12
par PCPixMusic
Micoute : Pourquoi n'utilises-tu pas la fonction RSet() ? => Merci, je ne connais pas cette fonction.
Zorro : Merci, j'ai déjà exploré la librairie String, mais après seulement six mois de programmation en PureBasic,
j'avoue qu'il y a des choses qui m'échappent encore.
Marc56 : Merci, c'est vrai que c'est plus simple.
Ollivier : Merci pour la correction des fautes. Il n'y a rien d'humiliant à faire des corrections, ça reste dans un échange courtois.
pierre003 : Sympa ton code
Ar-S : En effet, je n'avais pas fait attention au fait que tu l'as fait assez large avec une valeur de trente pixels.
Re: Heure courante dans une chaîne de caractère
Publié : sam. 24/juin/2017 12:07
par case
exemple avec rset() calle a droite d'une chaine de longueur fixe une chaine.
Lset() calle la chaine a gauche
rset(chaine,longueur,caractere de remplissage)
exemple rset ("1",2,"0") retournera "01"
exemple rset ("1",4,"0") retournera "0001"
lset(chaine,longueur,caractere de remplissage)
exemple lset ("1",2,"0") retournera "10"
exemple lset ("1",4,"@") retournera "1@@@"
Code : Tout sélectionner
debug RSet(Str(Day(Date())),2,"0")+"/"+RSet(Str(Month(Date())),2,"0")+"/"+Str(Year(Date()))+" - "+RSet(Str(Hour(Date())),2,"0")+":"+RSet(Str(Minute(Date())),2,"0")+":"+RSet(Str(Second(Date())),2,"0")