IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement de jobs Discussion :

Tri en fonction du Format de la date


Sujet :

Développement de jobs

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Mars 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Mars 2016
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Tri en fonction du Format de la date
    Bonjour,

    Je dois insérer dans une base de données Mysql des données provenant d'un fichier excel mis à jours manuellement.
    Je rencontre des problèmes sur les formats de date lors de l'insertion.
    J'essaye donc via un TMAP de trier les dates au bon format des autres comme ceci :
    row5.Start_date != null ?
    TalendDate.isDate(row5.Start_date,"E MMM dd HH:mm:ss Z yyyy") ?
    TalendDate.parseDate("E MMM dd HH:mm:ss Z yyyy",row5.Start_date)
    :
    null
    :
    TalendDate.isDate(row5.End_date__Expected_Delivery_date_ ,"E MMM dd HH:mm:ss Z yyyy") ?
    TalendDate.parseDate("E MMM dd HH:mm:ss Z yyyy",row5.End_date__Expected_Delivery_date_ )
    :
    null

    çà ne fonctionne pas, en sortie je n'ai que des valeurs null.

    Quelqu'un a-t-il une idée ?

    Merci par avance.

  2. #2
    Membre expérimenté Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 795
    Points : 1 685
    Points
    1 685
    Par défaut
    Citation Envoyé par jeremie.renou Voir le message
    Bonjour,
    çà ne fonctionne pas, en sortie je n'ai que des valeurs null.
    C'est qu'il n'arrive pas à parser tes dates.
    Il doit y avoir une erreur dans ton formatter

    Peux-tu ajouter un tLogRow et nous donner un exemple de date à parser
    Pensez à marquer vos tickets comme résolus.
    Pensez aussi aux pour les réponses pertinantes

    Quand une discution est résolue depuis un moment pour revenir dessus, il est mieux d'en crée une nouvelle avec un lien vers l'autre car :
    • Elle sera en haut du forum, elle sera donc plus visible
    • Une discussion résolue, on ne passe pas dessus pour aider, on passe dessus si on a le même problème
    • Tu demandes surement à tes clients de faire le même

  3. #3
    Membre expérimenté Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 795
    Points : 1 685
    Points
    1 685
    Par défaut
    De ce que j'ai vu sur le Web essaye le format "EEE MMM dd HH:mm:ss Z yyyy"
    Pensez à marquer vos tickets comme résolus.
    Pensez aussi aux pour les réponses pertinantes

    Quand une discution est résolue depuis un moment pour revenir dessus, il est mieux d'en crée une nouvelle avec un lien vers l'autre car :
    • Elle sera en haut du forum, elle sera donc plus visible
    • Une discussion résolue, on ne passe pas dessus pour aider, on passe dessus si on a le même problème
    • Tu demandes surement à tes clients de faire le même

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Mars 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Mars 2016
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Mes données de départ dans excel sont au format string.
    Je dois les transformer au format date quand c'est possible pour insertion dans une base.
    Si ce n'est pas possible alors renvoyer la ligne dans un fichier excel.
    d'où mon code dans le tmap :
    row5.Start_date != null ?
    TalendDate.isDate(row5.Start_date,"EEE MMM dd HH:mm:ss Z yyyy") == false ?
    TalendDate.parseDate("E MMM dd HH:mm:ss Z yyyy",row5.Start_date)
    :
    null
    :
    TalendDate.isDate(row5.End_date__Expected_Delivery_date_ ,"EEE MMM dd HH:mm:ss Z yyyy") ?
    TalendDate.parseDate("E MMM dd HH:mm:ss Z yyyy",row5.End_date__Expected_Delivery_date_ )
    :
    null

    Le problème c'est que TalendDate.isDate ne renvoi que false.
    Il ne détecte pas que le format est bon et donc que c'est une date.

    J'ai essayé cette syntaxe pour le isdate :
    TalendDate.isDate(row5.Start_date,"EEE MMM dd HH:mm:ss Z yyyy")
    Même résultat.

    Chose supprenante : TalendDate.parseDate("E MMM dd HH:mm:ss Z yyyy",row5.Start_date), cette commande parse correctement la date.

  5. #5
    Membre expérimenté Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 795
    Points : 1 685
    Points
    1 685
    Par défaut
    J'ai peut-être une autre piste

    Tu devrais vérifier ta locale par defaut

    J'ai fait les testes suivants sur ma machines

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    package routines;
     
    import java.util.Date;
    import java.util.Locale;
     
     
    public class TestDate {
     
    	public static void main(String[] args) {
     
     
    		System.out.println(Locale.getDefault());
    		//fr_FR
     
     
    		System.out.println(TalendDate.isDate("Wed Oct 16 00:00:00 +0200 2013","E MMM dd HH:mm:ss Z yyyy"));
    		//false
     
     
    		System.out.println(TalendDate.isDate("jeu. mars 31 15:58:24 +0200 2016","E MMM dd HH:mm:ss Z yyyy"));
    		//true
     
     
     
    		System.out.println(TalendDate.formatDate("E MMM dd HH:mm:ss Z yyyy", new Date()));
    		//jeu. mars 31 16:51:37 +0200 2016
     
    		try{
    			System.out.println(TalendDate.parseDate("E MMM dd HH:mm:ss Z yyyy" ,"jeu. mars 31 15:58:24 +0200 2016"));
    			//Thu Mar 31 15:58:24 CEST 2016
    		}catch(Exception e){
    			e.printStackTrace();
    		}
     
    		try{
    			System.out.println(TalendDate.parseDate("E MMM dd HH:mm:ss Z yyyy" ,"Wed Oct 16 00:00:00 CEST 2013"));
     
    		}catch(Exception e){
    			e.printStackTrace();
    			/*
    			 java.lang.RuntimeException: java.text.ParseException: Unparseable date: "Wed Oct 16 00:00:00 CEST 2013"
    			at routines.TalendDate.parseDate(TalendDate.java:895)
    			at routines.TalendDate.parseDate(TalendDate.java:839)
    			at routines.TestDate.main(TestDate.java:33)
    			Caused by: java.text.ParseException: Unparseable date: "Wed Oct 16 00:00:00 CEST 2013"
    			at java.text.DateFormat.parse(Unknown Source)
    			at routines.TalendDate.parseDate(TalendDate.java:881)
    			... 2 more
    			 */
    		}
     
    	}
     
     
     
     
     
    }


    Puis j'ai changé ma locale par défaut par l'anglais

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    package routines;
     
    import java.util.Date;
    import java.util.Locale;
     
     
    public class TestDate {
     
    	public static void main(String[] args) {
     
     
    		Locale.setDefault(Locale.US);
     
    		System.out.println(Locale.getDefault());
    		//en_US
     
     
    		System.out.println(TalendDate.isDate("Wed Oct 16 00:00:00 +0200 2013","E MMM dd HH:mm:ss Z yyyy"));
    		//true
     
     
    		System.out.println(TalendDate.isDate("jeu. mars 31 15:58:24 +0200 2016","E MMM dd HH:mm:ss Z yyyy"));
    		//false
     
     
     
    		System.out.println(TalendDate.formatDate("E MMM dd HH:mm:ss Z yyyy", new Date()));
    		//Thu Mar 31 16:58:16 +0200 2016
     
    		try{
    			System.out.println(TalendDate.parseDate("E MMM dd HH:mm:ss Z yyyy" ,"jeu. mars 31 15:58:24 +0200 2016"));
    		}catch(Exception e){
    			e.printStackTrace();
    			/*
    			  java.lang.RuntimeException: java.text.ParseException: Unparseable date: "jeu. mars 31 15:58:24 +0200 2016"
    				at routines.TalendDate.parseDate(TalendDate.java:895)
    				at routines.TalendDate.parseDate(TalendDate.java:839)
    				at routines.TestDate.main(TestDate.java:31)
    			Caused by: java.text.ParseException: Unparseable date: "jeu. mars 31 15:58:24 +0200 2016"
    				at java.text.DateFormat.parse(Unknown Source)
    				at routines.TalendDate.parseDate(TalendDate.java:881)
    			 */
    		}
     
    		try{
    			System.out.println(TalendDate.parseDate("E MMM dd HH:mm:ss Z yyyy" ,"Wed Oct 16 00:00:00 CEST 2013"));
    			//Wed Oct 16 00:00:00 CEST 2013
    		}catch(Exception e){
    			e.printStackTrace();
     
    		}
     
    	}
     
     
     
     
     
    }



    Selon la locale courante le comportement est différent.

    Ajoute un
    tPreJob + tJava qui fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(java.util.Locale.getDefault());
    et si vois que tu es en français tu as 2 options :

    Soit tu modifies le code du tJava par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.util.Locale.setDefaut(java.util.Locale.Locale.US)
    Soit tu ajoutes les paramètres suivant à la JVM dans l'onglet "Paramètres avancés" de la vue éxécuter

    -Duser.language=en
    -Duser.country=US
    Pensez à marquer vos tickets comme résolus.
    Pensez aussi aux pour les réponses pertinantes

    Quand une discution est résolue depuis un moment pour revenir dessus, il est mieux d'en crée une nouvelle avec un lien vers l'autre car :
    • Elle sera en haut du forum, elle sera donc plus visible
    • Une discussion résolue, on ne passe pas dessus pour aider, on passe dessus si on a le même problème
    • Tu demandes surement à tes clients de faire le même

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo