为什么SimpleDateFormat无法正确解析我的日期?

时间:2010-11-09 01:46:53

标签: java parsing date jdbc simpledateformat

我正在努力避免reinstalling Eclipse to solve this,所以我希望有人可以帮助解决这个日期解析问题。这就是我的工作。

DateFormat dateFormat; 

这是我班上的一个变量。我把它设置如下。

dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
// Example input: 2010-11-07 16:00:00

当调用另一个方法时,我使用传入的字符串创建一个新的java.sql.Date实例。为了清楚起见,这是一个缩短的版本。

public void aMethod (String activateTime, String expireTime) {
    Date example = new Date(dateFormat.parse(activateTime).getTime());
    Date example2 = new Date(dateFormat.parse(expireTime).getTime());
}

当我查看由这些操作产生的字符串时(只是将.toString()添加到上面的实例),我得到如下输出

2010-10-30
2010-11-29

...而不是输入字符串,报告为......

2010-10-30 17:00:00
2010-11-29 16:00:00

任何人都知道为什么它没有按我指定的模式给我一个日期?

3 个答案:

答案 0 :(得分:3)

java.sql.Date仅包含日期时间的日期部分。您可能希望使用java.sql.Timestamp代替。

Timestamp example = new Timestamp(dateFormat.parse(activateTime).getTime());
Timestamp example2 = new Timestamp(dateFormat.parse(expireTime).getTime());

它在普通SQL数据库中的工作方式也是如此。 DATE数据类型仅表示日期,TIME数据类型仅表示时间。 TIMESTAMP数据类型(有时称为DATETIME)表示日期和时间。

请注意,您的小时模式不正确。根据给定的示例,您更愿意使用HH而不是hh。另请参阅SimpleDateFormat javadoc

另见:

答案 1 :(得分:2)

java.sql.Date的javadoc指定toString方法返回格式为“yyyy-mm-dd”的字符串,因此您正在看到正确的行为。 Date对象不知道您用于创建它的格式化程序。要以相同格式获取输出,请使用DateFormat.format方法而不是toString

public void aMethod (String activateTime, String expireTime) {
    Date example = new Date(dateFormat.parse(activateTime).getTime());
    Date example2 = new Date(dateFormat.parse(expireTime).getTime());
    System.out.println(example.toString() + " vs " + dateFormat.format(example));
    System.out.println(example2.toString() + " vs " + dateFormat.format(example2));
}

答案 2 :(得分:0)

您是否尝试将java.sql.Date更改为java.util.Date?