数据库和数据表之间显示不同的日期值

时间:2010-09-29 03:52:25

标签: java oracle jsf date jdbc

我在使用JSF数据表的Java Web应用程序中显示来自Oracle数据库的日期时遇到问题。显示的日期与数据库中的日期不同。

以下是一些例子:

in oracle: 24-APR-87 display in datatable: Apr 23, 1987  
in oracle: 01-JAN-10 display in datatable: Dec 31, 2009  
in oracle: 13-MAR-89 display in datatable: Mar 12, 1989  

这是我的Java源代码:

public Result getTable() {  
    try {  
        Class.forName(dbDriver);  
        con = DriverManager.getConnection(url);  
        ps = con.createStatement();  
        String query = "SELECT * from " + getTableName();  
        rs = ps.executeQuery(query);  
        return(ResultSupport.toResult(rs));  
    } catch(Exception e) { 
        return(null);
    }  
}  

我的问题的原因和解决方案是什么?

2 个答案:

答案 0 :(得分:1)

Oracle使用内部格式存储日期,该格式与格式化显示方式无关。

您所看到的是不同前端使用的两种不同的日期格式。

要强制查询使用您选择的格式,最好使用TO_CHAR,例如:

SELECT TO_CHAR(mydatecolumn,'DD-MON-YYYY') FROM mytable;

答案 1 :(得分:1)

尝试将f:convertDateTime转换器与JSF输出一起使用,并为其设置正确的timeZone属性。
示例(编辑):

<h:outputText value="#{bean.myDate}">
    <f:convertDateTime timeZone="America/Los_Angeles" type="date" pattern="MM/dd/yyyy" />
</h:outputText>