2011-06-28 41 views
4
客户端时区

我有以下代码:显示日期时间值与JSF

<h:outputText value="#{myDataBean.date}"> 
    <f:convertDateTime type="both" timeStyle="short" dateStyle="short" /> 
</h:outputText> 

如何显示在JSF(RichFaces的)与客户端时区这个日期元素?我想我应该使用timeZone属性,但我应该指定它的值?

任何帮助将不胜感激。

回答

4

问题是你不会知道客户端的时区是设置timeZone属性,我能想到的唯一办法就是在JavaScript中转换日期。

<f:convertDateTime>转换器默认为UTC时间。

<h:body onload="setTimezoneDates();" > 
    <h:form id="myform"> 
     <h:outputText value="#{indexBean.today}" id="mydate"> 
     <f:convertDateTime type="both" timeStyle="short" dateStyle="medium" /> 
     </h:outputText> 
    </h:form> 
</h:body> 

然后使用JavaScript UTC日期/时间转换为客户的本地日期/时间和替换它在页面上。

function setTimezoneDates() { 
    var strDate = document.getElementById("myform:mydate").innerHTML + " UTC"; 
    var d = new Date(strDate);          
    document.getElementById("myform:mydate").innerHTML = d.toLocaleString(); 
} 

输出日期仍需要格式化,可能有更好的方法来在Javascript中做到这一点。另外请注意,我必须将<f:convertDateTime> dateStyle设置为中等,才能在IE中使用。

+0

谢谢马克,我已经实现它使用JavaScript,但寻找更容易的解决方案。反正你的方法看起来不错,所以我会设置你的答案为接受:) – kardanov

+0

你也可以解释我的原因dateStyle =“中等“的IE浏览器,导致它适合我的”短“价值? – kardanov

+2

当我在IE8中试用它时,像6/28/11这样的短日期被转换为1911年6月28日,而不是2011年。 – Mark