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

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

113
répondu BalusC 2011-05-24 12:06:38

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 10:14:35

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 10:08:14

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 14:58:35
<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 13:39:21