f:convertDateTime displays wrong Date if timezone is provided by a bean

While specifiing the timezone as a string literal works flawless:

<h:outputText value="#{item.dateChange}">
    <f:convertDateTime pattern="dd.MM.yyyy HH:mm" timeZone="Europe/Berlin"/>
</h:outputText>

Providing the value by bean doesn't work (Timeoffset 1h to UTC and daylight saving 1h are not applied)

<h:outputText value="#{item.dateChange}">
    <f:convertDateTime pattern="dd.MM.yyyy HH:mm" timeZone="#{item.platform.timeZone}"/>
</h:outputText>

I tried both of the methods below none of them works:

public TimeZone getTimeZone() {
    return TimeZone.getTimeZone("Europe/Berlin");
}

public String getTimeZone() {
    return "Europe/Berlin";
}

I need the timezone to be configurable for a user, how can this be achieved?

EDIT: In order to make sure that the timezone object is available:

 <h:outputText value="#{item.platform.timeZone}"/> 

sun.util.calendar.ZoneInfo[id="Europe/Berlin",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=143,lastRule=java.util.SimpleTimeZone[id=Europe/Berlin,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]]

or simply: "Europe/Berlin" in the 2nd attempt.


As pointed out by Gimby a similiar question has already be answered by BalusC

Due to restrictions in the f: tags a customConverter is required.

A detailed description of the issue and a sample implementation by BalsuC is available here: JSF convertDateTime with timezone in datatable

Note: The converter provided there expects the bean to return a string describing the timeZone and not the TimeZone object.

链接地址: http://www.djcxy.com/p/3104.html

上一篇: 时间戳偏差Java与JavaScript的旧日期(3600secs)

下一篇: f:如果时区由bean提供,则convertDateTime显示错误日期