f: convertDateTime affiche la mauvaise Date [dupliquer]
cette question a déjà une réponse ici:
- JSF convertDateTime rend la veille 1 réponse
dans mon Application Web Je récupère des données en utilisant Hibernate et les affiche dans un RichFaces dataTable.
dans ma table MySQL il y a un champ de type "date." Lorsque j'imprime ce champ dans le journal de mon haricot, il montre la date correcte de la base de données (par exemple 2010-04-21). Mais dans le rich: datable il apparaît comme ceci:
4/20/10
il y a donc une différence d'un jour!
j'ai ajouté le convertisseur" f:convertDateTime "et défini l'attribut" type "à" both " afin d'afficher le temps aussi. Alors maintenant il est écrit:
4/20/10 10: 00:00 PM
le Code pour "f: convertDateTime" j'ai utilisé:
<f:convertDateTime locale="locale.US" type="both" dateStyle="short"/>
il semble donc comme f:convertDateTime rêve un peu de temps parce qu'il n'y a pas d'information de temps dans le champ MySQL-table!
Qu'est-ce que je fais de mal? Que dois-je faire pour afficher la date correcte?
Merci Tom
5 réponses
JSF est par défaut UTC timezone pour les convertisseurs date/heure. Pour outrepasser cela, vous devez définir l'attribut timeZone
dans chaque convertisseur date/heure. Voici un exemple utilisant le fuseau horaire EDT (en supposant que vous êtes à l'est de nous).
<f:convertDateTime locale="en_US" type="both" dateStyle="short" timeZone="EDT" />
l'attribut locale
ne contrôle que le formatage complet du nom jour/mois (il devient anglais).
si vous voulez Outrepasser le fuseau horaire UTC par défaut pour être la plate-forme d'exploitation par défaut timezone, alors vous devez ajouter le contexte suivant param à web.xml
:
<context-param>
<param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
<param-value>true</param-value>
</context-param>
alors vous n'avez pas besoin d'éditer chaque étiquette individuelle JSF <f:convertXxx>
.
selon les spécifications JSF, f:convertdate Time par défaut à UTC timezone (indépendamment de n'importe quel réglage de vm timezone), qui diffère de votre fuseau horaire de -1 heure (heure standard) ou -2 heures (heure d'été).
nous utilisons une application scoped page bean avec une propriété timeZone comme ceci:
public TimeZone getTimeZone() {
return TimeZone.getDefault();
}
ensuite nous utilisons la propriété dans une expression EL:
<ice:outputText value="#{deliveryDate}">
<f:convertDateTime type="both" timeZone="#{Application.timeZone}" />
</ice:outputText>
l'avantage est qu'il considère standard/heure d'été automatiquement.
vous avez probablement des problèmes avec les fuseaux horaires.
vérifier cet article sur la façon de les résoudre.
avant cela, vous pouvez essayer de définir explicitement l'attribut timeZone
de <f:convertDataTime>
nous avons eu le même problème et avons fini par écrire un nouveau convertisseur JSF qui utilise une forme simple créée avec new SimpleDateFormat(String pattern)
pour la conversion de date.
<h:outputText id="dateId" value="#{item.date}">
<f:convertDateTime for="dateId" type="date" dateStyle="long" locale="pl"/> </h:outputText>