Voila tout est dans le titre. J'ai un String "Wed Mar 11 00:00:00 GMT 2009"
que je veux convertir en date.
Version imprimable
Voila tout est dans le titre. J'ai un String "Wed Mar 11 00:00:00 GMT 2009"
que je veux convertir en date.
Pour parser ou formatter des dates selon un format précis, utilise SimpleDateFormat.
La FAQ aurait pu te renseigner...
ca ne marche pas avec le format de chaine que j'ai mis
Pourrais tu indiquer le code avec lequel tu fais tes tests?
1 - J'enregistre dans la base une date sous mysql new Date() ;
2- j'affiche ses données dans un JTableCode:
1
2
3
4
5
6
7
8
9
10
11
12 public Operation(){ //setCode(new Long(01)); setLibelle("libelle"); setDatefin(new Date()); setDatedeb(new Date()); setDatesais(new Date()); setMontant(new Long(0)); setStatut("S"); setObjet("objet"); setDivers("divers"); }
pour ce faire j'utilise un cell render qui est JDateChooser
Cest donc à ce niveau que ça coinceCode:
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 import java.awt.Component; import javax.swing.JTable; import java.text.SimpleDateFormat; public class DateChooserRenderer extends com.toedter.calendar.JDateChooser implements javax.swing.table.TableCellRenderer { public DateChooserRenderer(){super();} public DateChooserRenderer(String arg0,String arg1,char c){super(arg0,arg1,c);} //public DateChooserRenderer(boolean startEmpty){super(startEmpty);} //public DateChooserRenderer(JCalendar jcalendar){super(jcalendar);} //public DateChooserRenderer(java.lang.String dateFormatString, boolean startEmpty){super(dateFormatString,startEmpty);} public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,int row, int column){ if (value == null) setDate(null); else { try { System.out.println(value.toString()); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); java.util.Date d = formatter.parse(value.toString()); System.out.println(d); setDate(new java.util.Date()); } catch(Exception e) {e.printStackTrace();} } return this; } }
Code:
1
2 java.util.Date d = formatter.parse(value.toString());
La problème est évident : tu trouves que "Wed Mar 11 00:00:00 GMT 2009" ça ressemble au format "yyyy-MM-dd" ?
Donc utilise un autre format lors de l'instanciation du SimpleDateFormat (la javadoc est ton amie...) et ça ira beaucoup mieux... ;)
ce que vous avez proposé ne marche pas par contre
est passéCode:
1
2 setDate((Date)value);
A qui parles-tu ?
Ce que j'ai proposé fonctionne parfaitement chez moi. Mais comme tu sembles avoir du mal à aller voir la javadoc, voici le code fonctionnel :
Code:
1
2 SimpleDateFormat dateFormat = new SimpleDateFormat( "EEE MMM d HH:mm:ss z yyyy", Locale.UK ); Date d = dateFormat.parse( "Wed Mar 11 00:00:00 GMT 2009" );
Ah, si l'Object value est en fait une Date, il est effectivement complètement inutile et contreproductif de la transformer en String (avec toString(), qui utilise le format local par défaut...) avant de la re-parser :)
Donc pas besoin de parser la date, et pas besoin d'utiliser SimpleDateFormat...
Mais c'est quand même bien, pour ta culture personnelle, d'avoir vu le fonctionnement de cette classe ;)
J'allais encore te proposer d'utiliser quand même le SimpleDateFormat pour afficher ta date dans le format que tu veux (méthode format), mais j'imagine qu'une classe s'appelant "JDateChooser" et dont le constructeur utilise un paramètre "dateFormatString" doit déjà offrir tout ce qu'il faut...
Dans la classe en paramètre c'est un Object qui est passé sinon effectivement c'est une date.
J'ai une autre question peut on imposer un format de date qui sera enregistré ds n'importe quelle base (MYSQL,ORACLE, ...)
(et ce au niveau de new Date())?
Si la base de données et le driver JDBC/ODBC ... sont bien faits, l'objet reçu sera toujours une Date (ou un objet équivalent, peut être un jour un Calendar).
Donc pour le transformer en String, ce sont les méthodes de JAVA qui sont utilisés (dépendant donc des "Locale").