虽然将时区指定为字符串字面值是完美的:
<h:outputText value="#{item.dateChange}">
<f:convertDateTime pattern="dd.MM.yyyy HH:mm" timeZone="Europe/Berlin"/>
</h:outputText>
按bean提供值不起作用(时间偏移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 ="欧洲/柏林",抵消= 3600000,dstSavings = 3600000, useDaylight = true,转换= 143,lastRule = java.util.SimpleTimeZone [id =欧洲/柏林,抵消= 3600000,dstSavings = 3600000, useDaylight = true, startYear = 0, startMode = 2, startMonth = 2, startDay = 1, startDayOfWeek = 1,开始时间= 3600000,startTimeMode = 2, endMode = 2, endMonth = 9, endDay = 1, endDayOfWeek = 1, endTime = 3600000, endTimeMode = 2]]
或在第二次尝试中简单地:"Europe/Berlin"
正如Gimby所指出的,BalusC已经回答了类似的问题
由于f:标签的限制,需要一个customConverter。
这个问题的详细描述和BalsuC的示例实现在这里:JSF convertDateTime与timezone在datatable
注意:这里提供的转换器期望bean返回一个描述timeZone的字符串,而不是timeZone对象。