Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

GEODATA DAYS 2024

#1 Mon 17 May 2010 15:36

Pierre
DesCartesPourUnMondeMeilleur
Date d'inscription: 22 Sep 2005
Messages: 1643

Format "français" de date à convertir

Aloha

La plupart du temps, les utilisateurs français (francophones ?) saisissent leurs dates sous la forme jour/mois/année. J'ai donc dans mon jeu de données à traiter des dates du type 30/07/84. Je souhaite les formater avec une année sur quatre chiffres. Mais si je passe cette date dans DateFormater, je vais obtenir 08/07/1984. Comment faire pour lui spécifier que le premier terme est bien le jour ?

D'avance, merci,


art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.

Hors ligne

 

#2 Mon 17 May 2010 16:32

Sarah - VEREMES
Participant actif
Date d'inscription: 21 Apr 2009
Messages: 51

Re: Format "français" de date à convertir

Bonjour,

Effectivement DateFormater n'aime pas trop le format "français"...
Pour contourner ce problème, on peut utiliser un AttributeSplitter pour découper le champ date par "/", demander à éclater la liste en 3 éléments. Avec StringConcatenator, on peut ainsi reconstruire la date "à l'anglaise" et ensuite passer dans le DateFormater avec %d"/"%m"/"%Y et ça devrait fonctionner...


Sarah MOURE
Veremes : support FME & version française

Hors ligne

 

#3 Mon 17 May 2010 17:02

Pierre
DesCartesPourUnMondeMeilleur
Date d'inscription: 22 Sep 2005
Messages: 1643

Re: Format "français" de date à convertir

Est-il sinon possible de le faire en Tcl ? J'ai vu qu'il y a des options dans le clock format.


art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.

Hors ligne

 

#4 Tue 18 May 2010 06:16

pyjoubert
Participant assidu
Lieu: Lyon
Date d'inscription: 21 Mar 2006
Messages: 343

Re: Format "français" de date à convertir

Bonjour,

Voici un transformer perso qui doit faire ce que tu dis. Il traduit les dates Apic en vraie date.

Dernière modification par pyjoubert (Tue 18 May 2010 06:17)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#5 Tue 18 May 2010 15:40

Pierre
DesCartesPourUnMondeMeilleur
Date d'inscription: 22 Sep 2005
Messages: 1643

Re: Format "français" de date à convertir

Voilà où j'en suis : j'ai mon fichier excel avec plusieurs dates dans un même champ. Toutes à priori au format français.
J'ai commencé ce code en m'inspirant de la fonction date formatter. Cela me permettrait de traiter toutes les dates du champ puis de les affecter à des attributs.
Mais lorsque j'utilise la fonction "clock scan" pour récupérer le nombre de secondes, il m'indique que le format attendu n'est pas celui rencontré.

Quelqu'un(e) a une idée ?

Code:

proc entrp_ {} {
puts "-------------nvel objet---------------"
foreach a  [FME_AttributeNames] {
    regsub -all {\n} [FME_GetAttribute $a] "; " b
    FME_SetAttribute $a $b
    }

#récupération des dates
set d_ [FME_GetAttribute  "Date déclaration ou autorisation" ]

foreach dt_ [regexp -all -inline {[0-9]*/[0-9]*/[0-9]*} $d_ ] {
#pour chaque date récupérée
        regexp -all {([0-9]*)/([0-9]*)/([0-9]*)} $dt_ b b1 b2 b3
#reformater la date au format anglosaxon
        set b_ $b2
        append b_ "/" $b1 "/" $b3
        set dateLen [string length $b_]     
#tester la date pour recréer les années sur 4 chiffres si besoin                       
    if {$dateLen > 0} {     \
                puts "date : $dt_ longueur : $dateLen à transformer : $b_"  
        switch $dateLen {
            10 {}
#c'est là que cela bloque. Il me dit que le format attendu n'est pas celui rencontré
            8 {set s [clock scan {$b_} -format {%m/%d/%y} ] 

                puts $s
                                set tp_ [clock format $s -format {%Y%m%d%H%M%S}]
                                puts $tp
                }
            7 {}
            default {}
            }
        }
    }
}

art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.

Hors ligne

 

Pied de page des forums

Powered by FluxBB