我有一个Oracle数据库,我有时间戳字段但没有存储时区。
我们开发的全球JSF应用程序在英国,美国和瑞典使用 - 我们同意将服务器时间保存日期,并将服务器时间显示日期。
我只是在托管bean中使用新的Date()创建日期戳,然后将它们存储在Oracle中。
我在Oracle有个约会日期:
21-AUG-13 12.24.13.125000000
我希望这个日期在JSF中呈现。我们知道服务器时间是UTC + 2.
JSF和Primefaces将其表示为:
21/08/2013 11:24
所以似乎减去了一个小时。
我炮轰了运行tomcat的linux实例,“date”给了我:
Thu Sep 19 16:25:45 CEST 2013
为新的Date()实例做一个System.out.println,我得到:
Thu Sep 19 15:25:45
我原本假设在托管bean中创建一个Date()实例会使用托管tomcat的linux服务器上的日期,但是落后一小时......
我知道日期没有时区组件,但假设是UTC ....
所以我可能正在将一个实际上是UTC + 2的日期读回日期实例,假设这是UTC + 0 ......然后以某种方式JSF,看到服务器在UTC + 2运行,减去2几个小时让我回到UTC !!
关于这个问题在哪里发生的任何建议,以及为什么新的Date()与linux date shell值不匹配,我们将不胜感激。
此致
我
答案 0 :(得分:0)
好的,谢谢......这似乎让链接上的东西变得不那么混乱了:
<context-param>
<param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
<param-value>true</param-value>
</context-param>
尝试了解oracle与tomcat之间的流程中发生的事情。不过。
我在Oracle中有一个日期(非时间戳值),在托管bean中保存2013年9月20日的日期实例...我的tomcat服务器是UTC + 2。 JSF将于2013年9月19日在我的ouputLabel中提供日期。
tomcat日志
default system timezone is sun.util.calendar.ZoneInfo[id="Europe/Stockholm",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=119,lastRule=java.util.SimpleTimeZone[id=Europe/Stockholm,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]]
JSF
<h:outputLabel value="#{customerTasksBean.travelTask.travelDate}" rendered="#{customerTasksBean.renderTravel}">
<f:convertDateTime pattern="dd-MMM, yyyy" />
</h:outputLabel>
JSF是否知道我的服务器是UTC + 2,所以为了更正UTC它会减去我在2013年9月20日之后的2小时,并在JSF转换期间将其推送到前一天?在我看来,日期没有UTC组件,为什么它会尝试将UTC + 0的日期转换为其他任何日期?
此致
我