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

时间:2014-05-09 14:16:54

标签: java jsf datetime

虽然将时区指定为字符串文字可以完美无缺:

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

通过bean提供值不起作用(不应用Timehset 1h到UTC和夏令时1h)

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

我尝试了以下两种方法,但没有一种方法有效:

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

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

我需要为用户配置时区,如何实现?

编辑: 为了确保时区对象可用:

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

sun.util.calendar.ZoneInfo [ID = “欧洲/柏林”,偏移量= 360万,dstSavings = 3600000,useDaylight =真,过渡= 143,lastRule = java.util.SimpleTimeZone中[ID =欧洲/柏林,偏移= 3600000,dstSavings = 3600000,useDaylight =真,startYear = 0,STARTMODE = 2,startMonth = 2,朝九特派= -1,startDayOfWeek = 1,开始时间= 3600000,startTimeMode = 2,endMode = 2,endMonth = 9,endday指定= -1,一个endDayOfWeek = 1,结束时间= 3600000,endTimeMode = 2]]

或简单地说:“欧洲/柏林”在第二次尝试。

1 个答案:

答案 0 :(得分:1)

正如Gimby所指出的,BalusC已经回答了一个类似的问题

由于f:标签的限制,需要使用customConverter。

此处提供了有关问题的详细说明以及BalsuC的示例实施: JSF convertDateTime with timezone in datatable

注意:那里提供的转换器要求bean返回描述timeZone而不是TimeZone对象的字符串。