【发布时间】:2020-03-03 13:53:35
【问题描述】:
我在尝试将 java.util.Date 转换为 java.sql.Date 时遇到了一些问题。我传入的日期参数原来是这样格式的字符串:2019-01-31。然后我尝试使用以下代码将其转换为 java.util.date:
SimpleDateFormat formatter = new SimpleDateFormat("YYYY-MM-DD");
Date date = null;
try {
date = formatter.parse(this._dDate);
} catch (ParseException e) {
e.printStackTrace();
}
在我的 SQL 语句中,我试图将其转换为 java.sql.Date:
buffer.append("SELECT * FROM TABLE1 WHERE LAST_LOGIN_DT < ");
buffer.append("TO_DATE('" + new java.sql.Date(date.getTime()) + "','YYYY-MM-DD') ");
但是,当我以字符串形式打印出缓冲区时,我意识到日期已更改。比如我传入的数据串是2018-01-01,但是在SQL语句中变成了2017-12-31。有什么想法吗?
谢谢!
【问题讨论】:
-
格式的大小写很重要。
-
你想要
"yyyy-MM-dd"。但不要这样做。直接从您的String转到您的java.sql.Date。它会为你节省很多压力。 -
@DawoodsaysreinstateMonica 抱歉,您的意思是将 SQL 更改为 "TO_DATE('" + new java.sql.Date(date) + "','yyyy-MM-dd') 并删除改为日期转换代码?
-
我还建议使用
PreparedStatement,而不是通过字符串连接来构建 SQL。出于各种原因。 -
我建议您不要使用这两个
Date类中的任何一个。它们设计不佳且早已过时。相反,只需使用来自java.time, the modern Java date and time API 的LocalDate。特别是select * from table1 where last_login_dt < ?;和yourPreparedStatement.setObject(LocalDate.parse("2019-01-31"));。