PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → format date iso8601
format date iso8601
Débuté par saien, 16 nov. 2018 17:09 - 8 réponses
Posté le 16 novembre 2018 - 17:09
Bonjour, J'utilise une API mais j'ai un problème de formatage de date je n'arrive pas à obtenir le format required par l'API

Voici le format demandé : 2018-05-23T12:32:50.557000+02:00.

Quelqu'un sait comment faire ?

Merci d'avance
Membre enregistré
351 messages
Popularité : +75 (75 votes)
Posté le 22 novembre 2018 - 15:22
Bonjour Saien,

C'est la date/heure en format ISO 8601. Le T c'est Time, et le +02:00 est ton fuseau horaire (ici celui de Europe/Paris heure d'été). les 557000 est une fraction de seconde.

Si tu veux plus d'informations sur ce format : https://fr.wikipedia.org/wiki/ISO_8601

Tu peux faire ce genre de chose :
DH est une DateHeure = DateHeureSys()
ISO_8601 est une chaîne = DateVersChaîne(DH,"AAAA-MM-JJTHH:mm:SS.CCC") + "000" + "+02:00"

Sauf que cela va fonctionner en été et uniquement sur le fuseau "Europe/Paris" donc trop restrictif, c'est ce que l'on appelle un mauvais développement !

Sans faire appel à des API ou quelque chose de compliqué ... il faut transformer ton heure locale en UTC et regarder la différence, tu auras ainsi le fuseau en fonction du GMT.

Il est donc plus propre de faire ça :
DH est une DateHeure = DateHeureSys()
Fuseau est une Durée = ChaîneVersDurée(DateHeureDifférence(DateHeureLocaleVersUTC(DH),DH),duréeCentième)
ISO_8601 est une chaîne = DateVersChaîne(DH,"AAAA-MM-JJTHH:mm:SS.CCC") + "000" + (Fuseau < 0 ? "-" SINON "+") + DuréeVersChaîne(Fuseau,"HH:MM")

Si tu as besoin de transformer ta date/heure avec le fuseau horaire d'un point GPS, j'ai une routine qui fait ça (sans aucun appel internet) que je peux mettre à ta disposition. Il est ainsi facile de transformer une date/heure selon le fuseau d'un lieu sur le globe.

--
Bon développement, Patrick [3po.fr]
Message modifié, 22 novembre 2018 - 15:23
Membre enregistré
351 messages
Popularité : +75 (75 votes)
Posté le 22 novembre 2018 - 16:21
Oups ... Désolé d'avoir précisé que c'était un format ISO 8601 ... puisque tu l'indiques déjà dans le sujet !
Posté le 10 décembre 2018 - 13:41
Merci, Est-ce tu sais comment afficher le fuseau horaire sous formet Europe/Paris dans json? j'aicréer un variant timezone avec un chargeparam("cd_timezone", "Europe/Paris") mais dans le json un anti-slash s'incrute devant le slash or l'Api que j'utilise pour mon projet demande un time zone sous ce format.
Posté le 19 avril 2019 - 11:14
Bonjour Patrick,
Je cherche à convertir une DateHeure avec un fuseau précis ("Europe/Paris").
J'ai vu la fonction DateHeureLocaleVersFuseau(dhLocal,"Europe/Paris") seulement elle ne fonctionne pas avec iOS.

dhLocale est un DateHeure = DateHeureSys()
<Compile SI TypeConfiguration=Android>
dhFrance est un DateHeure = DateHeureLocaleVersFuseau(dhLocale, "Europe/Paris")
<SINON>
//convertir dhLocale vers le fuseau "Europe/Paris"

<FIN>


Vous semblez avoir une routine pour cela ? pouvez-vous la partager ?
Membre enregistré
351 messages
Popularité : +75 (75 votes)
Posté le 24 avril 2019 - 15:46
Bonjour,

Ma routine permet de connaitre le fuseau horaire d'un point GPS du globe ... exemple de retour de ma routine "Europe/Paris", "Europe/Brussels" ... mais elle ne permet pas de connaitre le décalage horaire à appliquer / ni cette ânerie d'heure d'hiver et heure d'été !

Comme tu connais ton fuseau horaire ... "Europe/Paris", tu es donc en UTC+1 l'hiver et UTC+2 l'été, le passage en heure d'été a lieu le dernier dimanche de Mars et le passage en heure d'hiver, le dernier dimanche d'Octobre.

A partir de ça ... tu convertis ta date/heure en UTC avec DateHeureLocaleVersUTC(DH) ... tu ajoutes 2h si elle est entre le dernier dimanche de mars 2h et le dernier dimanche d'octobre 3h sinon tu ajoutes 1h.

--
Bon développement, Patrick [3po.fr]
Message modifié, 24 avril 2019 - 15:46
Posté le 01 juillet 2020 - 17:48
Bonjour,
Je cherches a faire la même chose dans l'autre sens :D
J'ai un format iso suite a une désérialisation json : 2020-06-30T23:33:00+02:00

alors oui je peux redécouper la chaine pour obtenir le format voulu, mais je trouve cela pas très efficient.
une idée?
Membre enregistré
351 messages
Popularité : +75 (75 votes)
Posté le 01 juillet 2020 - 18:50
Bonjour,

Certainement un truc dans ce genre :
DH_Texte est une chaîne = "2020-06-30T23:33:00+02:00"
DH_UTC est une DateHeure = ChaîneVersDate(DH_Texte,"AAAA-MM-JJ-HH-mm-SS")
DH_UTC..Heure -= Val(DH_Texte[[20 SUR 3]])
Trace(DH_UTC,DateHeureUTCVersLocale(DH_UTC))

Résultat du trace : 20200630213300000 20200630233300000

--
Bon développement, Patrick [3po.fr]
Posté le 04 juillet 2020 - 18:54
Merci cela fonctionne.