parser une sting en date - Java - Programmation
Marsh Posté le 12-08-2005 à 18:38:52
Bonjour,
Je ne comprends pas bien ce que tu fais dans ton code. Ci-dessous un exemple simplissime qui fonctionne :
Code :
|
Sortie :
7/22/05 2:20 PM Local Time -> Fri Jul 22 14:20:00 CST 2005 |
Nicolas
Marsh Posté le 12-08-2005 à 18:39:07
Pense à passer une locale us au constructeur de SimpleDateFormat .
De plus fait un test sur la chaine de la date et vire le "Local Time" s'il existe.
edit : grilled avec une autre solution
Marsh Posté le 12-08-2005 à 21:49:42
attention : jamais de == pour tester l'égalitée de String en Java !!!
faut utiliser la fonction equals() sous peine d'avoir de drôles de surprises une fois de temps en temps ...
autre remarque : une recherche google te donnait la réponse au 4e lien : http://www.google.fr/search?hl=fr& [...] java&meta=
Marsh Posté le 13-08-2005 à 08:30:07
benou a écrit : attention : jamais de == pour tester l'égalitée de String en Java !!! |
ouai, j'ai deja vu ce problem, j'utiise containtEqual() dans une autre partie du code,mais la, je dois avoué que je l'avais oublié! sa saute au yeux pourtant!!!
j'essai ta solution nicolas, et je te redis !
pour ce que fait mon code, ba, j'ai lu tellement d'info sur les dates, comment les formater, ... que je savais pas trop comment m'y prendre!
alors, je déclare un SimpleDateFormat, je lui done le format de la chaine, je vais voir sur une pile quel type d'objet s'y trouve, et j'affecte la date dans l'objet correspondant!
pour le second bout de code, j'avais trouvé que SHORT me donnait le format pour les heures, alors ca me semblait une bonne idée !
Marsh Posté le 13-08-2005 à 13:22:54
bien joué Nicolas !
code beaucoup plus compact que l'exemple de sun, et ca marche !
benou a écrit : autre remarque : une recherche google te donnait la réponse au 4e lien : http://www.google.fr/search?hl=fr& [...] java&meta= |
ba, tu pense bien que je l'ai lu cette page !!! (voir le format SHORT mentionné)
mon probleme, est justement que meme avec ce formatage, je récupere au final un truc bizard !
j'arrive pas a parser ma String représentant l'heure.
peut etre j'utilise pas les bon objet ?
quelqun a une idée avec un objet type Time, ou autre type que j'aurais pas encore rencontré ?
Marsh Posté le 14-08-2005 à 19:20:14
le formatage faut le pesonaliser en fonction de ton format de date, hein !
t'as lu la javadoc de SimpleDateFormat ?
(je sais pas de quel format SHORT tu parles)
PS : tin, ce topic est maintenant le premier résultat de la recherche google dont j'ai filé le lien
Marsh Posté le 15-08-2005 à 12:17:06
c bete comme choux à utiliser SimpleDateFormat pourtant...tu lui donne le pattern selon lequel tu veux qu'il travaille, et ensuite :
parse(String) te renvoit une Date si ta String suit le formattage sus-nommé
format(Date) te renvoit une String au format sus-nommé...
Exemple :
Code :
|
Le code ci-dessus te renvoit donc :
08/15/05 12:18
Après y'a des subtilités, tu peux jouer avec les locales pour obtenir le formatter par défaut qui correspond à la locale, etc...
Marsh Posté le 15-08-2005 à 12:59:58
Jubijub a écrit : c bete comme choux à utiliser SimpleDateFormat pourtant...tu lui donne le pattern selon lequel tu veux qu'il travaille, et ensuite :
|
merci pour ton idée, mais pour les dates complètes, type dd/MM/yyyy HH:mm, ca marche!
en fait, j'avait une erreur dans mon patern, je m'en suis rendu compte en voyant la solution de Nicolas.
le probleme est quand la string ne contient qu'une heure, donc un format HH:mm. du cout, tu te retrouve avec une date initialisé a janvier 1970 et un truc bizard pour l'heure.
je crois que je vais devoir initialiser une date a la date du jour, juste pour pouvoir lui passer une heure.
et mon probleme, est que je récupère des info pour plusieurs jours, donc je vais me tapper les incrémentations des dates en fonction des objet presents à la seconde ou troisieme place dans ma pile !
j'aurais aimé éviter ca !
Marsh Posté le 15-08-2005 à 13:02:58
benou a écrit : le formatage faut le pesonaliser en fonction de ton format de date, hein ! |
???
benou a écrit : (je sais pas de quel format SHORT tu parles) |
cf: doc java!
benou a écrit : PS : tin, ce topic est maintenant le premier résultat de la recherche google dont j'ai filé le lien |
util? !!!
Marsh Posté le 15-08-2005 à 15:29:51
mars47058 a écrit : merci pour ton idée, mais pour les dates complètes, type dd/MM/yyyy HH:mm, ca marche! |
heu je trouve que tu expliques pas très bien ton problème...fonctionellement tu veux faire quoi concrètement ?
- quelles sont tes données de départ, et sous quelle forme
- quel traitement veux tu y appliquer
- sous quelle forme tu veux l'afficher
si tu veux jouer avec des heures ou des dates (retrancher des jours, savoir quel jour était le 15 mai 1983, etc...) faut voir du coté de Calendar...
Marsh Posté le 15-08-2005 à 16:11:42
en fait, je sais pas ce qu'on va en foutre de ces heures une fois quelles sont parsées. c'est pourquoi je voulais avoir un format nikel.
au début, j'avais des strings, on fait pas plus simple !!
je crois que je vais vraiment chercher a savoir ce qu'elles deviennent ces heures ! je crois pas qu'on fasse d'oppération dessus comme tu me le demande, donc, le format, ...
... on s'en fout effectivement !
Marsh Posté le 15-08-2005 à 16:59:51
heu faudrait que tu relises la doc parce que t'a pas du comprendre tout, sans méchancetés...
Qu'est-ce qu'un objet java.util.Date ?
C'est un object qui représente une date (whaaaaaou) sous forme du nombre de millisecondes écoulées depuis le début de l'ère informatique, soit le 1/1/1970 ...
donc l'heure te sert à etre plus précis dans le décompte en millisecondes...
si ton format de base à des heures, parse-les ...ca te coutera pas plus cher, pis si plus tard t'a des besoins de tri, tu sera pas emmerdé (si tu parses sans les heures je crois que la date se met au jour donné, à 0h00'000)...c facile à vérifier de toute façon...
bref, si ta string de base contient des heures, t'emmerde pas, parse-les ...après en sortie t libre de pas les réafficher (tu peux avoir 2 SimpleDateFormat, un qui parse ton format avec l'heure, et un autre qui te l'affiche sans l'heure...
PS : et t'a pas répondu à mes 3 simples questions...ce qui aide pas à comprendre ton pb réellement, et donc fait perdre un peu du temps à tlm en essayant de jouer aux devinettes...si tu pouvais y répondre, ca nous aiderait
Marsh Posté le 15-08-2005 à 17:20:25
Jubijub a écrit : |
string
Jubijub a écrit : - quel traitement veux tu y appliquer |
c'est le point qui commence a coincer !
moi je dis on se contente d'afficher la string, mes potes disent il faut un objet type date, (j'ajoute créer une classe Heure av 2 entier) il savent pas me dire pourquoi et ou est l'intéret de leur truc ! (ils sont plus nombreux, je voulais leur faire palisir )!
Jubijub a écrit : - sous quelle forme tu veux l'afficher |
au final, je pense que ca sera une string (je me vois pas implémenter des pendules grafique pour afficher leurs putin d'heures)
voila !
j'avais bien pensé qu'on pouvais les stoker sous 2 entiers minutes & secondes, mais ca plait pas!
bien le rappel sur la classe date !
ma solution apparait pas si con !
Marsh Posté le 15-08-2005 à 18:44:54
mars47058 a écrit : cf: doc java! |
je rêve où c'est toi me renvoit vers la doc, là
c'est gentil, mais moi je sais m'en servir
par contre quand tu dis "j'avais trouvé que SHORT me donnait le format pour les heures", ca ne veut strictement rien dire... donc explique toi de façon compréhensible.
mars47058 a écrit : util? !!! |
tu veux dire quoi là ?
Marsh Posté le 15-08-2005 à 20:41:19
mars47058 a écrit : string |
t'explique tjs pas : tu pourrais donner un exemple de String de départ, et la finalité...on sait meme pas dans quoi ca va...c pas compliqué ce que je te demande...je te demande ce que tu as, et ce que tu dois en faire...
après la solution qui va, elle va dépendre de ce que t'a au départ (format, etc...), et de ce que tu veux à l'arrivée...je sais pas si t développeur ou si tu cherches à le devenir, mais tu devras absolument apprendre à expliquer tes problèmes plus directement...
hésite pas à donner un exemple...
sinon tes copains ont raison : une date, ca se stocke en Date...le JDK est fait pour manipuler ca, tu peux tout faire avec...l'avantage de la classe Date, c'est qu'elle stocke pas que la date, mais date + heure à la milliseconde près...
Marsh Posté le 26-08-2005 à 00:14:15
Jubijub a écrit : sinon tes copains ont raison : une date, ca se stocke en Date...le JDK est fait pour manipuler ca, tu peux tout faire avec...l'avantage de la classe Date, c'est qu'elle stocke pas que la date, mais date + heure à la milliseconde près... |
ouai, en fait ils ont raison. ils savaient pas pourquoi, mais après t'avoir lu, j'ai trouvé l'intéret!
voila, j'ai une heure donnée en string "10:45 AM"
je veux pouvoir la récupérer ensuite dans une date exprimée en miliseconde, initialisée à la date courante, mais à l'heure précisé ici, soit 10h45.
j'ai ecrit un bout de programe pour voir comment je peux utiliser la classe GregorianCalendar, mais il y a un truc que je pige pas :
Code :
|
dans la cosole, je récupère ca :
premier calendar: Thu Aug 25 23:55:00 CEST 2005
year: 2005
month: 7
day: 25
HOUR_OF_DAY: 23
MINUTE: 55
normale, on est le 25/08/2005, il est 23h55.
la, je me dis parfait, je vais pouvoir initialiser mon grégorian calendar comme je veux !
je tente ca :
Code :
|
second Calendar : Sat Mar 05 10:45:00 CET 1
year: 1 -- >??
month: 2 -- >??
day: 5 -- >??
HOUR_OF_DAY: 10
MINUTE: 45
seule l'heure est correcte!
quand j'utilise " GregorianCalendar.YEAR, GregorianCalendar.MONTH, GregorianCalendar.DAY_OF_MONTH" , quel date prend il en référence ?
j'ai alors ecrit ca :
Code :
|
toisieme Calendar : Sat Mar 05 10:45:00 CET 1
year: 2005
month: 7
day: 25
HOUR_OF_DAY: 10
MINUTE: 45
le resultat est correct !
la, je comprend pas !
quelqu'un peu tester ca chez lui?
Marsh Posté le 26-08-2005 à 00:16:44
c'est quoi cette instanciation à la n'importe quoi ?
(Calendar.getCalendarInstance, déjà, pour commencer, ensuite tu passes n'imp comme valeurs)
Marsh Posté le 26-08-2005 à 09:43:33
cf doc Sun !
http://java.sun.com/j2se/1.5.0/doc [...] endar.html
maintenant, si la doc est pas clair,ba quand on débute, évidamnet, on risque d'écrire des connerie !
cette méthode me donne ce que je veux!
si elle est pas bonne, il faut m'expliquer ce qu'elle fout la !
si il faut pas l'utiliser, sun devrait la virer !
Marsh Posté le 26-08-2005 à 10:03:07
the real moins moins a écrit : c'est quoi cette instanciation à la n'importe quoi ? |
Code :
|
résultat :
premier calendar: Fri Aug 26 09:54:50 CEST 2005
year: 2005
month: 7
day: 26
HOUR_OF_DAY: 9
MINUTE: 54
second calendar: Fri Aug 26 09:54:51 CEST 2005
year: 2005
month: 7
day: 26
HOUR_OF_DAY: 9
MINUTE: 54
les 2 methodes donne le meme résultat!
la miene est mauvaise, la tienne est bonne. mais peut tu m'expliquer pourquoi?
pour moi, la premiere méthode est beaucoup plus pratique a utiliser du fait que tu initialise ton calendrier avec l'année, le mois, le jour, et l'heure que tu souhaite.
si je veux utiliser ta méthode en passant les memes parametres, comment je fais ?
Marsh Posté le 26-08-2005 à 11:14:32
c pas comme ca que s'utilise un calendar...
tu l'initialise avec une date, comme tu réglerais la date de ton magnétoscope par ex...
Si tu fais un getInstance, il s'initialise tout seul avec un new Date(), qui donne la date actuelle...
ensuite le calendar a des "fields", et pour chaque field, tu as des get, des set, et des méthodes roll...
il faut passer par ca...
si tu veux dire qu'on est 12h, tu fais :
calendar.set(Calendar.HOUR_OF_DAY, 12);
et ainsi de suite pour tous tes champs...
Marsh Posté le 26-08-2005 à 11:53:42
Jubijub a écrit : |
ok !!
Field Manipulation
The calendar fields can be changed using three methods: set(), add(), and roll().
set(f, value) changes calendar field f to value. In addition, it sets an internal member variable to indicate that calendar field f has been changed. Although calendar field f is changed immediately, the calendar's time value in milliseconds is not recomputed until the next call to get(), getTime(), getTimeInMillis()...
...
Example: Consider a GregorianCalendar originally set to August 31, 1999. Calling set(Calendar.MONTH, Calendar.SEPTEMBER) sets the date to September 31, 1999. This is a temporary internal representation that resolves to October 1, 1999 if getTime()is then called. However, a call to set(Calendar.DAY_OF_MONTH, 30) before the call to getTime() sets the date to September 30, 1999, since no recomputation occurs after set() itself.
ca m'énerve !!!!!
une fois de plus, s'était trop facile !!!
merci a tous ceux qui on pris un peu de leur temps pour aider un petit débutant, et la prochaine fois, j'éssairai aussi d'expliquer mon probleme plus clairement !
promis !
Marsh Posté le 12-08-2005 à 15:51:47
salut !
mon probleme est le suivant :
je parse du xml, et je récupère des stirngs qui représente des dates.
je veux donc les convertir en dates.
voila mon code :
pour une date de type: "7/22/05 2:20 PM Local Time"
et ca me retourne un truc de ce genre :
Wed Jan 12 14:50:00 CET 2005
un autre cas, pour parser une heure, "5:12 AM" par exemple :
et ca me retourne un truc de ce genre :
Thu Jan 01 06:14:00 CET 1970
je sais pas combien de temps j'ai passer a lire les doc de sun, mais j'ai toujours pas de solotion.
beaucoup de forum donnent une fonction stringToDate(string, format), mais aucun donne la librairie ou elle se situe.
quelqu'un pourait me dire quel format je dois donner, ou quelle fonction je dois utiliser ?