Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > ETL > Talend
Talend Forum d'entraide sur Talend (Talend Open Studio, ...). Avant de poster --> FAQ Talend, Tutoriels Talend
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/07/2011, 12h18   #1
Invité régulier
 
Inscription : août 2006
Messages : 104
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 104
Points : 8
Points : 8
Par défaut Conversion de date et gestion de date vide

Bonjour,
J'ai un problème dans un tMap.
Je lis un flux RSS (tRSSInput) dans lequel le champs pubDate est :
Soit en GMT (Valeur ramenée : "30 Apr 2011 14:53:53 GMT")
Soit en CEST (Valeur ramenée : "")

Mon champs de table est en DateTime.

Je souhaite donc dans mon outPut de tMap avoir quelque chose du style

Si row1.pubdate = vide
Alors date = datetime.now()
Sinon date = row1.pubdate convert to datetime

Pour l'instant, j'essaye de gérer la chaine vide en faisant ça (mais ne fonctionne pas) :

Code :
1
2
3
(row1.PUBDATE.isEmpty())
? TalendDate.parseDate("yyyy-MM-dd HH:mm:ss","TalendDate.getCurrentDate()")
:row1.PUBDATE
Je vous remercie par avance de votre aide.
Scots est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 14h04   #2
Invité régulier
 
Inscription : août 2006
Messages : 104
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 104
Points : 8
Points : 8
J'ai essayé ça :

Code :
1
2
3
(row1.PUBDATE.isEmpty())
? TalendDate.parseDate("yyyy-MM-dd HH:mm:ss","2011-07-30 12:51:12")
: new java.util.Date(Long.parseLong(row1.PUBDATE))
Mais quand mon job arrive sur la première date GMT j'ai l'erreur suivante :

Citation:
Exception in component tMap_1
java.lang.NumberFormatException: For input string: "20 Jul 2011 11:50:00 GMT"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Long.parseLong(Unknown Source)
at java.lang.Long.parseLong(Unknown Source)
at mediascit.recupflux_0_1.RecupFlux.tMysqlInput_1Process(RecupFlux.java:1246)
at mediascit.recupflux_0_1.RecupFlux.runJobInTOS(RecupFlux.java:1708)
at mediascit.recupflux_0_1.RecupFlux.main(RecupFlux.java:1579)
Et comment je peux mettre la date du jour à la place de "2011-07-30 12:51:12" ? getCurrentDate ne fonctionne pas
Scots est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 15h11   #3
Membre à l'essai
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2011
Messages : 20
Points : 20
Points : 20
Il ne faut pas mettre entre parenthèses TalendDate.getCurrentDate() tout d'abord je pense.

Ensuite la méthode parseLong et la classe Long prend un String en paramètre et non un Datetime
LittleFr0g est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 15h18   #4
Invité régulier
 
Inscription : août 2006
Messages : 104
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 104
Points : 8
Points : 8
Merci de me répondre, je désespérais ...

Peux-tu être plus explicite ?

row1.PUBDATE est un string

et je ne comprend pas les parenthèses ? Tu veux dire guillemets ? sans, ça ne marche pas non plus.

J'essayes ça aussi :

Code :
1
2
3
(row1.PUBDATE.isEmpty())
? TalendDate.parseDate("yyyy-MM-dd HH:mm:ss","2011-07-30 12:51:12")
: TalendDate.parseDate("dd MMM yyyy HH:mm:ss",row1.PUBDATE)
Mais il ne peut pas parser (la deuxième ligne) car dans row1.PUBDATE ma string contient une donnée au format :

20 Jul 2011 12:13:00 GMT

Je prends toute idée
Scots est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 15h54   #5
Membre à l'essai
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2011
Messages : 20
Points : 20
Points : 20
Oui excuse moi, c'était "guillemets" et non parenthèses.
Cela te renvoit quoi comme erreur "getCurrentDate()" ?

Je pensais que row1.PUBDATE était un Datetime donc le souci ne vient pas de là effectivement.

Il faudrait essayer de modifier la donnée avant de l'envoyer dans la fonction parseDate. Il faudrait écrire une petite routine qui prend row1.PUBDATE en paramètre, ajuste l'heure en fonction de GMt+1,+2 etc... et renvoie tout cela sans l'info GMT justement.

preparePubdate(20 Jul 2011 12:13:00 GMT+2) ---> 20 Jul 2011 10:13:00
par exemple

Je pense que le parseDate fonctionnera ensuite
LittleFr0g est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 15h59   #6
Invité régulier
 
Inscription : août 2006
Messages : 104
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 104
Points : 8
Points : 8
Pfffuuuu j'y capte rien ... Je désèspère. Jamais fais de JAVA en plus ...

L'erreur avec getCurrentDate :
"la méthode parseDate(String, String) du type TalendDate ne s'applique pas aux arguments (String, Date).

Du coup je m'étais dis de mettre juste celle-ci puisqu'il la considère comme une date. Mais non ...

Le champs PUBDATE d'un flux RSS est au format String. C'est bien mon problème hélàs
Scots est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 16h10   #7
Membre à l'essai
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2011
Messages : 20
Points : 20
Points : 20
Pas facile effectivement quand on n'a jamais fait de java.

Déjà pour résoudre le problème de la date actuelle, tu n'as pas besoin de faire un parseDate, il te suffit d'écrire :

Code :
1
2
(row1.PUBDATE.isEmpty())
? TalendDate.currentDate()
Pour le "sinon", il faut créer une routine comme je disais au dessus pour "préparer" ton string à la fonction parseDate.
Ou si GMT n'est pas important , tu peux écrire :

Code :
1
2
3
(row1.PUBDATE.isEmpty())
? TalendDate.currentDate()
: TalendDate.parseDate("dd MMM yyyy HH:mm:ss",row1.PUBDATE.substring(0,String.indexOf("G"))
Cela a pour effet de supprimer GMT et peut-être que le parseDate fonctionnera
LittleFr0g est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 16h18   #8
Invité régulier
 
Inscription : août 2006
Messages : 104
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 104
Points : 8
Points : 8
Pas mal ça ... Justement, je me fiche du GMT.

Il manquait une ")" mais j'ai quand même :

Impossible de créer une référence statique à une méthode non statique indexOf(String) à partir du type String
Scots est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 16h34   #9
Membre à l'essai
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2011
Messages : 20
Points : 20
Points : 20
Oui c'est moi le boulet :

Code :
1
2
3
(row1.PUBDATE.isEmpty())
? TalendDate.currentDate()
: TalendDate.parseDate("dd MMM yyyy HH:mm:ss",row1.PUBDATE.substring(0,row1.PUBDATE.indexOf("G")))
LittleFr0g est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 16h49   #10
Membre Expert
 
Avatar de haskouse
 
Homme Mustapha EL HASSAK
Ingénieur développement logiciels
Inscription : août 2009
Messages : 627
Détails du profil
Informations personnelles :
Nom : Homme Mustapha EL HASSAK
Âge : 26
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : août 2009
Messages : 627
Points : 1 514
Points : 1 514
Voilà, essai avec ce bout de code,
Je l'ai testé il marche pour moi.

Code :
1
2
3
4
5

(row1.PUBDATE.equals(""))
?TalendDate.getCurrentDate()
:TalendDate.parseDateLocale("dd MMM yyyy HH:mm:ss 'GMT'",row1.PUBDATE,"EN") 
En effet les dates que tu reçois par ton flux RSS sont en anglais alors que toi (peut-être) tu travailles sur un environnement en français ce qui fait qu'il ne reconnaitera pas les mois et il te remontera une exception java. Donc au moment du parse il vaut mieux utiliser "parseDateLocale" avec la locale "EN" comme ça tu es sûr que ça marchera quelque soit l'environnement.

N.B : Tu peux garder le GMT et l'inclure dans ton pattern, pas obligé de faire un subString.

Bonne chance.
__________________
Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant. "Mohammed le Messager d’Allah" (que la paix et le salut d'Allah soient sur lui)

Mes articles publiés
haskouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 16h51   #11
Invité régulier
 
Inscription : août 2006
Messages : 104
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 104
Points : 8
Points : 8
J'aurais pu le voir aussi lol ... Mais non :

Citation:
Exception in component tMap_1
java.lang.RuntimeException: java.text.ParseException: Unparseable date: "20 Jul 2011 14:34:00 "
at routines.TalendDate.parseDate(TalendDate.java:503)
at mediascit.recupflux_0_1.RecupFlux.tMysqlInput_1Process(RecupFlux.java:1342)
at mediascit.recupflux_0_1.RecupFlux.runJobInTOS(RecupFlux.java:1744)
at mediascit.recupflux_0_1.RecupFlux.main(RecupFlux.java:1615)
Caused by: java.text.ParseException: Unparseable date: "20 Jul 2011 14:34:00 "
at java.text.DateFormat.parse(Unknown Source)
at routines.TalendDate.parseDate(TalendDate.java:501)
... 3 more
Scots est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 17h02   #12
Invité régulier
 
Inscription : août 2006
Messages : 104
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 104
Points : 8
Points : 8
Ok, alors ça, ça fonctionne.

Mais (il y en a toujours un) :

Je perds les heurs, minutes, secondes ...

Et ça, je ne peut pas me le permettre.
Scots est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 17h09   #13
Membre Expert
 
Avatar de haskouse
 
Homme Mustapha EL HASSAK
Ingénieur développement logiciels
Inscription : août 2009
Messages : 627
Détails du profil
Informations personnelles :
Nom : Homme Mustapha EL HASSAK
Âge : 26
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : août 2009
Messages : 627
Points : 1 514
Points : 1 514
Qu'est ce que tu veux dire par tu perds les heures, minutes et les secondes ?

Est ce que tu stockes les données dans une BD et tu ne les retrouves pas ? ou bien tu affiches dans la console avec un tlogRow ?
__________________
Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant. "Mohammed le Messager d’Allah" (que la paix et le salut d'Allah soient sur lui)

Mes articles publiés
haskouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 17h11   #14
Invité régulier
 
Inscription : août 2006
Messages : 104
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 104
Points : 8
Points : 8
Pour l'instant un tLogRow (j'ai désactivé ma table MySQL).

Et dans le tLogRow la date est : 15-07-2011

au lieu de par exemple : 15-07-2011 18:51:12
Scots est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 17h15   #15
Membre Expert
 
Avatar de haskouse
 
Homme Mustapha EL HASSAK
Ingénieur développement logiciels
Inscription : août 2009
Messages : 627
Détails du profil
Informations personnelles :
Nom : Homme Mustapha EL HASSAK
Âge : 26
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : août 2009
Messages : 627
Points : 1 514
Points : 1 514
Pour le tLogRow il faut modifier le pattern d'affichage, toi tu as laissé celui par défaut, càd dd-MM-yyyy, il faut mettre un pattern qui affiche les heures, minutes, etc ...

Va sur les propriétés de ton tLogRow et modifie le shéma en mettant ce pattern par exemple dd MMM yyyy HH:mm:ss pour ta date
__________________
Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant. "Mohammed le Messager d’Allah" (que la paix et le salut d'Allah soient sur lui)

Mes articles publiés
haskouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 17h20   #16
Invité régulier
 
Inscription : août 2006
Messages : 104
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 104
Points : 8
Points : 8
je ne savais pas qu'on pouvais paramétrer le tLogRow Cool.

Ben les gars un grand merci à vous !

Tout à l'ai de fonctionner nickel.

Je teste dans ma table et je vous dis si j'ai un soucis.
Scots est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 17h48   #17
Membre à l'essai
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2011
Messages : 20
Points : 20
Points : 20
N'oublie pas un petit [Resolu] pour ton titre de post
LittleFr0g est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 11h03   #18
Invité régulier
 
Inscription : août 2006
Messages : 104
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 104
Points : 8
Points : 8
J'aurais bien aimé mettre résolu mais je découvre un bug ce matin :

Mon job qui tourne parfaitement dans mon studio ne fonctionne plus une fois publié sur mon serveur. J'ai les erreurs suivantes :

Citation:
Error : Data truncation: Incorrect datetime value: '20 Jul 2011 23:00:00 GMT' for column 'date' at row 1
Error : Data truncation: Incorrect datetime value: '21 Jul 2011 08:37:35 GMT' for column 'date' at row 1
Error : Data truncation: Incorrect datetime value: '21 Jul 2011 07:18:00 GMT' for column 'date' at row 1
La base et les tables sont bien sûr les mêmes.

Une idée ?
Scots est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 16h21   #19
Membre Expert
 
Avatar de haskouse
 
Homme Mustapha EL HASSAK
Ingénieur développement logiciels
Inscription : août 2009
Messages : 627
Détails du profil
Informations personnelles :
Nom : Homme Mustapha EL HASSAK
Âge : 26
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : août 2009
Messages : 627
Points : 1 514
Points : 1 514
Bonjour,

La date que tu essaies d'insérer dans ta base contient le 'GMT' je pense qu'il faut l'enlever de là !!

Sinon quel est le type exacte de ta colonne dans la base MySql ? c'est dateTime, ou bien timeStamp, ou ... ?
__________________
Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant. "Mohammed le Messager d’Allah" (que la paix et le salut d'Allah soient sur lui)

Mes articles publiés
haskouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 18h51   #20
Nouveau Membre du Club
 
Inscription : mars 2009
Messages : 155
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : mars 2009
Messages : 155
Points : 30
Points : 30
Par défaut parsedate

je suis venu un peu en retard, scoot tu avais qlq part en haut qil te renvoi comme erreur (date, string ) à la place de (date, date) ce que ton 2e argument devrait etre une date. il faut que tu le parse(ton parametre en string) avec la methode talenddate.parsedate pour que il devienne une date.
essai
moustaf_26 est déconnecté   Envoyer un message privé Réponse avec citation 01
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h41.


 
 
 
 
Partenaires

Hébergement Web