2012-02-27 8 views
4

Dans mon bean géré JSF j'ai déclaré startDate comme type java.utilDate et j'ai aussi des getters et des setters. De la base de données startDate est le type de date.Java date convertir la chaîne en date

Quand je reçois le format valeur est de type par défaut et formater la date

SimpleDateFormat df = new SimpleDateFormat(" dd MMM yyyy"); 
Date oneDate = new Date(startDate); 
df.format(oneDate); 

Problème Je suis face est df.format(oneDate); retourne la chaîne. Est-il possible de convertir df.format(oneDate) en date, de sorte que je n'ai pas besoin de changer mon type de données startDate.

Toute aide est fortement appréciée.

Merci

+2

Il suffit d'utiliser le 'parse()'. Cependant, je ne vois pas comment cela serait utile. Vous finiriez probablement avec le même objet 'Date' que vous avez commencé. Si vous avez l'intention de le formater pour la représentation humaine dans certaines interfaces, il vous suffit de le formater exactement au moment où vous allez le présenter aux humains. – BalusC

+0

Espérons que cela vous aide: http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html#parse(java.lang.String, java.text.ParsePosition) –

+0

Pourquoi ne pas étendre Date et juste utiliser votre propre méthode toString? –

Répondre

10

Selon le commentaire sur la question:

@BalusC Je suis d'accord avec ce que vous avez dit, il vaut mieux pour formater dans l'interface utilisateur. J'ai donc ajouté ce qui suit dans ma page jsf.

<p:inputText value="#{vacationschedule.convertTime(vacationschedule.selectedRow.startDate)}"> 

et convertTime méthode managedBean est

public String convertTime(Date time){ 
    Date date = new Date(); 
    Format format = new SimpleDateFormat("yyyy MM dd"); 
    return format.format(date); 
} 

<p:inputText> est montrant correctement si je voudrais utiliser <p:calendar> alors je reçois erreur

GRAVES: java.lang.IllegalArgumentException : Impossible de formater l'objet donné en tant que date

Vous cherchez la solution dans la mauvaise direction. La mise en forme ciblée sur l'humain doit être effectuée du côté View (UI), pas du côté du modèle, et encore moins du côté du contrôleur.

Pour présenter un objet Date dans un modèle convivial humain dans un composant JSF, vous devriez utiliser étiquette <f:convertDateTime> fournie par ensemble standard de composants JSF:

<p:inputText value="#{vacationschedule.selectedRow.startDate}"> 
    <f:convertDateTime pattern="yyyy MM dd" /> 
</p:inputText> 

De cette façon, vous pouvez garder la propriété juste Date tous les temps. De cette façon, vous pourrez également enregistrer la valeur éditée (ce qui ne serait pas possible avec votre tentative initiale!).

Quant aux composants de <p:calendar> PrimeFaces, il a un attribut pattern exactement à cet effet:

<p:calendar value="#{vacationschedule.selectedRow.startDate}" pattern="yyyy MM dd" /> 

Téléchargez et consultez le PrimeFaces Users Guide pour se renseigner sur tous les attributs disponibles.

+0

Merci beaucoup BalusC, cela a aidé. Appréciez votre bonne réponse. – user75ponic

+0

De rien. – BalusC

+0

Mais je vois un petit problème quand j'affiche la date dans ' user75ponic

2

En utilisant le même objet SimpleDateFormat que vous avez créé,

df.parse(yourDateString); 
0

J'espère que vous mon aide de code

public String dateToString(Date date, SimpleDateFormat formatter) { 
    return formatter.format(date); 
} 

public Date stringToDate(String date, SimpleDateFormat formatter) { 
    try { 
     return formatter.parse(date); 
    } catch (ParseException e) { 
     //Catching exception 
    } 
    return null; 
} 
Questions connexes