【问题标题】:Java: convert String to DateJava:将字符串转换为日期
【发布时间】:2010-11-28 18:03:27
【问题描述】:

我需要将像 2010-11-28 这样的字符串转换为日期类型以保存在 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(可能这是第一个错误)。

------------------- 编辑2--------------- ------------

代码被简化了,但是:堆栈跟踪没有显示任何奇怪的东西,validStartDate 和 validEndDate 被转换成这样的东西 Tue Nov 30 00:00:00 CET(所以不是空的)。作业确实正确保存在数据库中。 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 来保存用户数据。字符串由 JQuery 小部件 Datepicker 创建。有谁知道如何解决这个问题?提前感谢您的帮助。

【问题讨论】:

  • 您确定startDateendDate 填充正确吗?
  • 那么,您不是在处理异常,而是忽略它并继续代码流?你应该抛出异常!它包含有关问题的有价值的信息。
  • 你的代码不完整...startDate, endDate是什么,a去哪里,session, s是什么。 catch 是空的还是什么?
  • 感谢您查看此内容。我编辑了我的原始帖子。

标签: java jquery hibernate jquery-ui date


【解决方案1】:

几个有问题的cmets:

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 是什么?您可以在 hibernate.cfg.xml 文件中使用 &lt;property name="show_sql"&gt;true&lt;/property&gt; 来启用该选项。

只有检查以上所有,你才能解决你的问题。

【讨论】:

  • 嗨,这里是答案;代码被简化了,但是:堆栈跟踪没有显示任何奇怪的东西,validStartDate 和 validEndDate 被转换为像这样的东西 Tue Nov 30 00:00:00 CET (所以不是空的)。作业确实正确保存在数据库中。 sql:插入public.assignment(type,valid_start_date,valid_end_date,id)值(5,NULL,NULL,2)
  • @sass:你的 Hibernate 映射呢?您是否可能在某处指定插入时两个日期都应为空?
  • 这里是映射:
  • 在 PostgreSQL 中我使用的是日期类型。
  • @sass:请发布作业类的整个映射。并将其发布在您的问题中,因为它很难从 cmets 中读取。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2016-09-07
    • 1970-01-01
    • 2011-06-13
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    相关资源
    最近更新 更多