【发布时间】:2014-06-27 07:53:13
【问题描述】:
虽然将时区指定为字符串文字可以完美地工作:
<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="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]]
或者简单地说:第二次尝试中的“欧洲/柏林”。
【问题讨论】:
-
只是为了确保这不是一件愚蠢的事情:当您使用 h:outputText 时看到的是 #{item.platform.timeZone} 属性?
-
@Gimby 要么是 TimeZone 对象的很长的 toString,要么是更高版本中的字符串“Europe/Berlin”。对我来说,表达式语言似乎不适用于此属性,我不知道这有什么特别之处。
-
此主题可能与您有关:stackoverflow.com/questions/7122460/…
-
我想知道 Item bean 的来源是怎样的。请贴出源代码。我已经使用 bean 中的时区设置了一个示例项目。当我在该 bean 中使用简单的 getter 时,它对我有用。
-
@Gimby 谢谢! BalusC 建议的 customConverter 解决了该问题,您可以将其添加为答案。