我正在努力避免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
任何人都知道为什么它没有按我指定的模式给我一个日期?
答案 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?