Java:将String转换为Date

时间:2010-11-28 18:03:27

标签: java jquery hibernate jquery-ui date

我需要将类似2010-11-28的String转换为Date类型,以保存在PostgreSQL数据库中。我尝试了这段代码但是当我在数据库中检查结果时,两个日期都为空:

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date validStartDate=null;
Date validEndDate=null;

    try {
        validStartDate = df.parse(startDate);
        validEndDate = df.parse(endDate);

    } catch (Exception e) {

      ...

    }

    Assigment a  = new Assignment(..., validStartDate, validEndDate);
    session.save(s);

--------------------------------编辑-------------- --------------

startDate和endDate是格式为yyyy-mm-dd的字符串,如2010-11-27。堆栈跟踪中没有任何内容(转换似乎在某种程度上有效)。如果有什么我可能会知道什么是错的。转换后,日期存储在postgres数据库中。是的,我使用了util.Date而不是sql.Date(可能这是第一个错误)。

------------------------------- Edit2 --------------- ------------

代码被简化但是:堆栈跟踪没有显示任何奇怪的内容,validStartDate和validEndDate被转换为类似于Tue Nov 30 00:00:00 CET(因此不为null)。 Assignment确实正确保存在数据库中。 sql:插入public.assignment(type,valid_start_date,valid_end_date,id)值(5,NULL,NULL,2)。我试图使用sql.Date但没有成功。

----------------------------作业映射-----------------

<hibernate-mapping>
  <class name="model.Assignment" schema="public" table="assignment">
    <id name="id" type="int">
      <column name="id"/>
      <generator class="increment"/>
    </id>


    <property name="validStartDate" type="date">
            <column name="valid_start_date" length="13" />
        </property>
        <property name="validEndDate" type="date">
            <column name="valid_end_date" length="13" />
        </property>
        <property name="type" type="integer">
            <column name="type" />
        </property>

  </class>
</hibernate-mapping>

我正在使用Hibernate来保存用户数据。 String由JQuery小部件Datepicker创建。有谁知道如何解决这个问题?在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

一些问题的评论:

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date validStartDate=null;
Date validEndDate=null;

try {
    validStartDate = df.parse(startDate);
    validEndDate = df.parse(endDate);

} catch (Exception e) {
    // are there any exceptions thrown and caught here?
}

// are validStartDate and validEndDate non-null at this point? 
// is this code even executed? it won't be if an exception was thrown...
Assigment a  = new Assignment(..., validStartDate, validEndDate);

// where did this "s" come from? did you mean "session.save(a)"?
session.save(s);

除了这些问题,您应该检查以下内容:

Hibernate真的将Assignment保存在数据库中吗?

你的Hibernate映射是否正确?

您是否尝试使用java.sql.date

生成的SQL是什么?您可以使用<property name="show_sql">true</property>文件中的hibernate.cfg.xml启用该选项。

只有通过检查以上所有内容,您才能解决问题。

答案 1 :(得分:0)

Date对象是java.util.Date对象还是java.sql.Date?我问的原因是SimpleDateFormat解析会将String转换为java.util.Date,但如果你将这个对象与SQL数据库一起使用,我怀疑你需要后者java.sql.Date。幸运的是,它们可以很容易地转换。另外,当你尝试转换时,你的阻止块会说什么?是否有任何异常被捕?