使用to_date以自定义格式存储日期时出错

时间:2012-12-28 15:15:38

标签: sql jdbc oracle11gr2 to-date

目的:

  1. 我想以dd/MM/yyyy格式在数据库中存储日期。

  2. 我首先使用DateFormat格式化它,导致将其更改为String数据类型,然后尝试使用to_date函数转换回日期数据类型,但它会被存储以19-DEC-12,即dd-MON-yy格式。

  3. 代码:

    DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); 
    java.util.Date dob=JDateChooser.getDate();  
    java.sql.Date dobloc=new java.sql.Date(dob.getTime()); 
    String dobloc1=df.format(dobloc);   
    String sql="INSERT INTO ADMIN.DEPARTMENT(date_of_birth) VALUES (to_date(?,'dd/MM/yyyy'))"
    PreparedStatement pst = conn.prepareStatement(sql);  
    pst.setString(1, dobloc1);          
    

2 个答案:

答案 0 :(得分:2)

日期不保留您在任何数据库中指定的格式(除非您使用字符串字段)大多数数据库系统将日期时间值存储为“双”值。

您应该将日期放入数据库,并在从数据库获取数据或将数据呈现给用户时担心格式化。

答案 1 :(得分:1)

我认为你误解了日期在Oracle中的实际运作方式 日期不像“19-DEC-12”或“19/12/2012”那样存储,它存储为7个字节。

有关详细信息,请参阅here

如果选择日期列,则使用NLS_DATE_FORMAT格式化。 这是用于格式化这7个字节的默认掩码。

当然,如果您使用自定义格式掩码,例如to_char(sysdate,'YYYY MM DD'),则会忽略默认的NLS_DATE_FORMAT。

正如我在上述评论中所读到的那样

  

实际上我正在尝试以正确的格式存储,因为我正在使用JTable在其他一些表单上显示我的数据库表的纯副本,因此存储日期的日期格式会直接显示。我不想在我的大量Jtables上转换日期格式,这可能会让我一次又一次地更改日期格式,因为我的表格不断增加

我建议你还保存用于格式化DB-Table中另一列中日期的特定格式掩码。 在JTable中显示日期之前,请使用DateFormat

使用此掩码对其进行格式化