JSF / Oracle中的日期和时区

时间:2013-09-19 14:30:38

标签: java jsf time timezone

我有一个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值不匹配,我们将不胜感激。

此致

1 个答案:

答案 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的日期转换为其他任何日期?

此致