[RESOLU]J2ME et la génération de timestamp...

J2ME et la génération de timestamp... [RESOLU] - Java - Programmation

Marsh Posté le 08-09-2009 à 17:49:39    

Messieurs bonsoirs,
 
Je me permet de venir vers vous... Je développe une appli J2me pour Nokia.  
J'ai un problème bizarre que je n'arrive pas à résoudre.
 
Voici ce qu'il se passe :  

Code :
  1. e_trspDate = new DateField("Time and Date *:", DateField.DATE_TIME, TimeZone.getTimeZone("GMT" ));
  2.         e_trspDate.setDate(currentTime);


Jusque là tout va bien, le mobile m'affiche bien la date et l'heure du moment.  
Je veux ensuite le transformer en timestamp pour l'envoyer dans une BDD.  
 

Code :
  1. long n_trspDate = e_trspDate.getDate().getTime();


 
Mais en gros ça me donne pas un timestamp.
Quelqu'un sait comment je dois procéder ? J'ai googlé un bon moment... et rien trouvé de concluant...


Message édité par limp15000 le 17-09-2009 à 13:45:08
Reply

Marsh Posté le 08-09-2009 à 17:49:39   

Reply

Marsh Posté le 09-09-2009 à 03:16:53    

Ton code a l'air correct. Si tu n'obtiens pas un timestamp, qu'est-ce que tu obtiens exactement en retour?

Reply

Marsh Posté le 10-09-2009 à 11:28:17    

J'ai une suite de chiffre qui correspondent à une date en 1958... C'est bizarre...

Reply

Marsh Posté le 10-09-2009 à 12:59:22    

En 1958 ça m'étonnerais, vu que le timestamp 0 correspond à Epoch (1er janvier 1970). Quand tu crées un objet Date à partir d'un Timestamp, la date est forcément plus récente que Epoch.

Reply

Marsh Posté le 10-09-2009 à 16:03:06    

Justement... Donc c'est pour ça que je vois pas le rapport... Vais refaire des tests au bureau demain...

Reply

Marsh Posté le 14-09-2009 à 11:33:09    

Bon j'ai refait un essai. J'ai mis comme date le 16 septembre à 10h.  
Et voici l'entrée que j'ai dans la BDD :  
2147483647
2147483647 translates to Tuesday, January 19th 2038, 03:14:07 (GMT)
C'est bizarre...

Reply

Marsh Posté le 14-09-2009 à 14:55:38    

Bon et quand tu débugges, tu as quelle valeur pour le Timestamp généré depuis l'horloge (currentTime), quelle valeur avant insertion dans la BDD (n_trspDate) et quelle valeur après insertion? Cela devrait être les mêmes. Si non, ça te permettra de voir quelle opération change la valeur.


Message édité par cbeyls le 14-09-2009 à 14:56:27
Reply

Marsh Posté le 14-09-2009 à 16:44:43    

Quand je débug c'est pareille... Lors de l'initialisation de la variable j'ai 1253112180000 et dans ma requête d'insertion pareille...  
Casse pied cette histoire... J'ai le problème dans le Wireless toolkit et sur mon mobile...

Reply

Marsh Posté le 14-09-2009 à 22:36:54    

Ok j'ai compris, en fait tu insères un long (64 bits) dans ta base de données et tu reçois en retour un int (32 bits) !
 
Je ne sais pas ce que tu utilises comme base de données mais assure-toi que la colonne te permette de stocker des valeurs de 64 bits. En tous les cas ton problème se situe au niveau du code qui communique avec la base de données ou de la base de données elle-même.

Reply

Marsh Posté le 16-09-2009 à 17:55:43    

Ben c'est une base MySQL... Et effectivement c'est un INT de 11 dans le champ...  
Je vais regarder de ce côté là, mais ça me semble très logique comme explication. Je te tiens au courant du résultat...
 
Edit : Donc au fait le script PHP qui récupère la valeur doit convertir ce quelle reçoit en int avant l'insertion dans la BDD. Correct ?


Message édité par limp15000 le 16-09-2009 à 17:58:46
Reply

Marsh Posté le 16-09-2009 à 17:55:43   

Reply

Marsh Posté le 16-09-2009 à 18:26:21    

Je pensais que ton appli J2ME stockait la date localement sur le téléphone.
 
Maintenant je ne sais pas quel chemin tu fais faire à ta donnée mais il faut que sur tout le chemin la donnée reste au format original, un long. Au niveau MySQL un long ça se stocke dans un champ BIGINT et pas INT. Tu dois modifier ta base de données et surtout pas convertir les 64 bits en 32 sinon tu perds l'information.


Message édité par cbeyls le 16-09-2009 à 18:34:49
Reply

Marsh Posté le 16-09-2009 à 18:32:00    

et tant qu'a faire, un timestamp, tu le mets dans une colonne de type .... timestamp [:dawa]

Reply

Marsh Posté le 16-09-2009 à 18:38:18    

Je ne me risquerais pas à convertir la valeur en Timestamp MySQL. Je crois que MySQL les stocke sur 32 bits seulement donc c'est incompatible par défaut. Stocke la valeur dans un BIGINT ça sera plus simple.

Reply

Marsh Posté le 17-09-2009 à 09:51:26    

Good morning, je vais vous donner un peu plus de détails. Donc j'ai une appli mobile J2me qui permet d'envoyer des annonces sur un site web.  
J'ai créer un champ date pour que le tel affiche un calendrier. C'est cette date que j'essai de transformer en timestamp.  
ensuite l'appli J2ME fait une requête avec les infos en GET vers un script PHP qui insère la valeur dans la base MySQL.
J'ai maintenant mis le champ en question en BIGINT mais ça ne change strictement rien.  
Dois je faire une manip en PHP pour avoir un timestamp valable ?  
Désolé pour toutes ces questions mais je sèche un peu :P

Reply

Marsh Posté le 17-09-2009 à 11:00:11    

Désolé mais sans le code difficile de deviner l'erreur :) Donc tu as ta valeur 64-bits du coté java, tu dois débugger jusqu'à trouver l'endroit où elle est transformée en 32-bit. Regarde du coté PHP si ton script reçoit la bonne valeur, regarde juste avant insertion dans la base si c'est toujours la bonne valeur... en tous cas si tu as mis un champ BIGINT c'est impossible que mysql détruise ta valeur.

Reply

Marsh Posté le 17-09-2009 à 11:30:47    

Ok je vais décrire mon test.
Première étape :  
Je rempli les champs de l'annonce et je saisi la date du 23 septembre à 9h19.
Cette date correspond à un timestamp de : 1253697984
Voici le timestamp envoyé à ma base de donnée :  
1253697593046
 
Voici la valeur stocké dans la BDD : 1253697593046
Donc la même.  
Arf, maintenant mon but c'est de savoir comment "convertir" cette valeur? Car là avec mes fonctions PHP ça correspond à une date loufoque.  
J'espère avoir été clair et un grand merci pour ton aide !

Reply

Marsh Posté le 17-09-2009 à 13:44:42    

J'ai trouvé la solution... Ca n'avait rien avoir avec du 32 ou 64 bit...  
Il semblerait que les téléphones génére des timestamp en millième de seconde...  
En PHP la norme c'est plutôt la seconde..
Du coup si on divise le timestamp envoyé par Java par 1000  et qu'on l'arrondit on obtient la bonne valeur ;)  
Ouf...

Reply

Marsh Posté le 17-09-2009 à 16:59:10    

Ben oui un Timestamp Java c'est en millisecondes sur 64 bits, ça a toujours été comme ça. C'est juste un nombre, tu aurais pu le stocker tel quel dans ta base de données dans un BIGINT, ça aurait fonctionné aussi! Sauf si évidemment avant de le stocker tu faisais des opérations de date/heure dessus en PHP. En PHP les fonctions travaillent avec un timestamp Unix stocké sur 32 bits avec une précision de l'ordre de la seconde. Ceux-ci expirent en 2038.


Message édité par cbeyls le 17-09-2009 à 17:07:14
Reply

Marsh Posté le 17-09-2009 à 21:15:24    

Ben je le savais pas ;)
Je débute en Java...  
Merci encore

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed