f: convertDateTime affiche la mauvaise Date [dupliquer]

cette question a déjà une réponse ici:

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

47
demandé sur Bozho 2010-04-22 12:27:03
la source

5 ответов

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> .

113
répondu BalusC 2011-05-24 16:06:38
la source

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.

15
répondu Zeemee 2011-05-24 14:14:35
la source

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>

3
répondu Bozho 2010-04-22 14:08:14
la source

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.

0
répondu silb 2011-03-21 17:58:35
la source
<h:outputText id="dateId" value="#{item.date}">
 <f:convertDateTime for="dateId" type="date" dateStyle="long" locale="pl"/>   </h:outputText>
0
répondu Tomasz 2014-01-31 17:39:21
la source

Autres questions sur java jsf jsf-2 hibernate richfaces