changer une date de JJ/MM/AAAA à AAAA/MM/JJ

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

changer une date de JJ/MM/AAAA à AAAA/MM/JJ

#1

Message par yohanb767 »

Bonjour à tous !

je ne parviens pas à trouver une fonction qui me permette de convertir une date de format JJ/MM/AAAA à AAAA/MM/JJ

je sais comment faire l'inverse avec la fonction _DateTimeFormat
mais dans le sens inverse aucune idée

Bonne journée à tous
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: changer une date de JJ/MM/AAAA à AAAA/MM/JJ

#2

Message par Tlem »

Bonjour.
Vous pourriez tout simplement utiliser StringSplit() pour décomposer votre date en trois parties, puis de remettre en forme tel que vous le désirez.

Genre :

Code : Tout sélectionner

 $date = "dd/mm/aaaa"

Local $adate = StringSplit($date, "/")
Local $sDate = $aDate[3] & "/" & $aDate[2] & "/" & $aDate[1]

MsgBox(32, "Date aaaa/mm/dd", $sDate)
Le code ci-dessous a été écrit sur le smartphone, donc il peut subsister des erreurs. ^^

Envoyé de mon appareil mobile en utilisant Tapatalk


Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

Re: changer une date de JJ/MM/AAAA à AAAA/MM/JJ

#3

Message par yohanb767 »

Merci Thierry ,

je n'avais pas pensé à ça , j'étais parti plus sur une fonction plus précise
mais cela m'avance bien quand même

merci
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: changer une date de JJ/MM/AAAA à AAAA/MM/JJ

#4

Message par Tlem »

Hé bien dans ce cas, utilisez "la fonction précise" : _Convert_ddmmyyyy_To_yyyymmdd() ^^
$date = "19/01/2018"
MsgBox(32, "Date aaaa/mm/dd", _Convert_ddmmyyyy_To_yyyymmdd($Date, "/"))



Func _Convert_ddmmyyyy_To_yyyymmdd($szDate, $szSeparator="")
   Local $sdate = StringRegExpReplace($szDate, "[ /.///-]", "")
   If StringLen($sdate) <> 8 Then Return SetError (1, 0, "")

   Return StringRight($sdate, 4) & $szSeparator & StringMid($sdate, 3, 2) & $szSeparator & StringLeft($sdate, 2)
EndFunc

Et pour encore plus de "précision", la même avec un check de la date :
#include <Date.au3>

$date = "19/01/2018" ; date valide
MsgBox(32, "Date aaaa/mm/dd", _Convert_ddmmyyyy_To_yyyymmdd($Date, "/"))

$date = "19/21/2018" ; Erreur sur le mois
MsgBox(32, "Date aaaa/mm/dd", _Convert_ddmmyyyy_To_yyyymmdd($Date, "/"))

$date = "1/1/2018"  ; Erreur sur le format
MsgBox(32, "Date aaaa/mm/dd", _Convert_ddmmyyyy_To_yyyymmdd($Date, "/"))



Func _Convert_ddmmyyyy_To_yyyymmdd($szDate, $szSeparator="")
   Local $sdate = StringRegExpReplace($szDate, "[ /.///-]", "") ; Supprime les caractères de séparation de date
   If StringLen($sdate) <> 8 Then Return SetError (1, 0, $szDate & " => Date Size Error") ; Vérifie qu'on a bien 8 chiffres
   ; Vérifie la validité de la date
   If Not _DateIsValid(StringRight($sdate, 4) & "/" & StringMid($sdate, 3, 2) & "/" & StringLeft($sdate, 2)) Then Return SetError (1, 0, $szDate & " => Input Date Error")

   ; Retourne la date formatée avec le séparateur choisit.
   Return StringRight($sdate, 4) & $szSeparator & StringMid($sdate, 3, 2) & $szSeparator & StringLeft($sdate, 2)
EndFunc
J'ai volontairement simplifié la gestion des erreurs, mais l'idée est là !!!
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: changer une date de JJ/MM/AAAA à AAAA/MM/JJ

#5

Message par mikell »

Rhaalala ces gens qui lisent pas le fichier d'aide :mrgreen:
D'après l'exemple n°2 pour StringRegExpReplace

Msgbox(0,"", StringRegExpReplace("19/01/2018", '(\d{2})/(\d{2})/(\d{4})', "$3/$2/$1") )
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: changer une date de JJ/MM/AAAA à AAAA/MM/JJ

#6

Message par Tlem »

Bonsoir.

Même si cela présente peu d’intérêt et que la vitesse d’exécution du code est d'un pouillème de pouilème plus rapide (oui je sais, c'est ridicule, mais bon) voici la même chose sans utiliser les expressions régulières. ^^

Local $d="19/01/2018"
MsgBox(0, "", StringRight($d, 4) & "/" & StringMid($d, 4, 2) & "/" & StringLeft($d, 2))
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: changer une date de JJ/MM/AAAA à AAAA/MM/JJ

#7

Message par mikell »

Bin disons que l'expression régulière a l'avantage de fonctionner pour une date qui ferait partie d'une phrase, par exemple, comme dans l'exemple du fichier d'aide. C'est pas rien :mrgreen:
Maintenant à choisir, j'aime autant ton code du post n°2 (avis personnel of corse)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: changer une date de JJ/MM/AAAA à AAAA/MM/JJ

#8

Message par Tlem »

Soit, mais en théorie, lorsque l'on souhaite faire un traitement sur une date, on évite de rajouter d'autres choses. ^^
D'autant que l'argument n'est valable que si et seulement si il n'y a pas d'autre date ou chiffre dans la chaine à traiter.

Les fonctions du message 4 ont le mérite traiter et retourner des dates avec différents séparateurs.
Cela permet de traiter une date du genre 19/01/2018 ou 19.01.2018 ou 19-01-2018 ou encore 19 01 2018 et de retourner la date sous la forme AAAAMMJJ avec ou sans séparateur de son choix.
Pour couronner le tout la deuxième fonction vérifie la validité de la date de sortie. :mrgreen:


PS: Concernant les temps de traitements, j'ai rayé mon commentaire qui est faux. De toute façon, a moins de faire des millions de traitements en boucle, l'écart est tellement infime qu'en parler était ridicule de ma part. :oops:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: changer une date de JJ/MM/AAAA à AAAA/MM/JJ

#9

Message par orax »

Tlem a écrit :Les fonctions du message 4 ont le mérite traiter et retourner des dates avec différents séparateurs.
Avec StringRegExpReplace, on pourrait faire...

Code : Tout sélectionner

MsgBox(0, "", StringRegExpReplace("19-01-2018", '(\d{2})(.?)(\d{2})(.?)(\d{4})', "$5$2$3$4$1"))
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: changer une date de JJ/MM/AAAA à AAAA/MM/JJ

#10

Message par Tlem »

Heuuu, oui mais non !
Dans l'exemple que tu donne, tu récupère le séparateur de l'input que tu réutilise sur l'output !!! C'est pas vraiment ça le but. ^^
Bon après il faut peu de changement pour adapter, mais ce ne sera pas sur une seule ligne.
Et puis, il n'y a pas de gestion d'erreur et pas de contrôle sur la validité de la date. :P
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre