9

这是我的问题:我有一个用户输入的日期如下:2012-12-24(字符串)我将时间连接到该字符串,然后转换为 java.util.Date 我的代码如下所示:

String tempstartdate = startdte;  //startdte is the string value from a txtfield
       tempstartdate += " 00:01:00";
       String tempenddate = startdte;
       tempenddate += " 23:59:59";

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");               
       java.util.Date validstartdte = null;
        java.util.Date validenddte = null;

validstartdte = df.parse(tempstartdate);  //validstartdte is a util.Date (and works)
validenddte = df.parse(tempenddate);

我的问题是,当我使用该 util.Date 并希望将其设为 sql.Date 时:

java.sql.Date sqlstartDate = new java.sql.Date(validstartdte.getTime());
java.sql.Date sqlendDate = new java.sql.Date(validenddte.getTime());

它不会给我我分配的时间戳,它只会以 yyyy-MM-dd 的形式返回日期(例如 2012-12-23)。

为什么!?我很沮丧。
注意:我注意到当我使用断点时,我能够展开 sqlendDate 并看到其中有一个名为 cdate 的值返回:2012-12-12T23:59:59.000-0500 我正在使用的数据库是 PostgreSQL。

请帮忙!非常感激。

4

3 回答 3

36

java.sql.Date没有时间。

改为使用java.sql.Timestamp

于 2012-12-21T01:06:29.247 回答
6

我可能很晚才能回答这个问题,但我认为这可能会有所帮助。

正如“Felipe Fonseca”所述,我将 util 日期转换为 sql 日期,如下所示:

public static java.sql.Timestamp convertToSqlDateTime(Date utilDate){
    return new java.sql.Timestamp(utilDate.getTime());
}

通常,java.sql.Date只返回 Date 值和 time 将被丢弃。所以,为了得到时间也,java.sql.TimeStamp必须使用。

TimeStamp使用毫秒时间值构造 Timestamp 对象。整数秒存储在基础日期值中;小数秒存储在 Timestamp 对象的 nanos 字段中。

为此目的,utilDate.getTime()用于返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此日期对象表示的毫秒数。

如果我们只想要java.sql.Date,我们可以这样做:

public static java.sql.Date convertToSqlDate(Date utilDate){
    return new java.sql.Date(utilDate.getTime());
}
于 2014-06-11T19:09:27.213 回答
1

由于您列出的原因,我完全放弃了使用 Java 的标准 Date 类。

我已经使用Joda Time一段时间了,发现它更简单。

于 2012-12-21T01:05:16.130 回答