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 ! :D

Merci encore et passez une très bonne soirée. :D

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 :

Code : Tout sélectionner

RSet(Str(Month(Date())), 2 "0") 

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.
:?: 8O « Simplement » (sic)

Code : Tout sélectionner

Debug FormatDate( "%dd/%mm/%yyyy", Date() )   ; => 21/06/2017
Simplement :!: :P

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 »
:arrow: 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.

:wink:

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 :

Code : Tout sélectionner

Debug FormatDate("%MM", Date() )
ç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

:wink:

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")