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



虽然将时区指定为字符串字面值是完美的:

<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对象。

相关内容

  • 没有找到相关文章

最新更新