迄今为止的Java字符串
我试图将Eclipse中的字符串“5/23/14 02:23:24”转换为要插入SQL语句的日期。我的守则如下:迄今为止的Java字符串,java,sql,datetime,jdbc,time,Java,Sql,Datetime,Jdbc,Time,我试图将Eclipse中的字符串“5/23/14 02:23:24”转换为要插入SQL语句的日期。我的守则如下: String dateAndTime = "5/23/14 02:23:24"; SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy HH:mm:ss"); Date date = sdf.parse(dateAndTime); long dateLong = date.getTime(); insertStatement.se
String dateAndTime = "5/23/14 02:23:24";
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy HH:mm:ss");
Date date = sdf.parse(dateAndTime);
long dateLong = date.getTime();
insertStatement.setDate(1, new java.sql.Date(dateLong));
我希望看到
23-MAY-2014 2.23.24.000000000 PM
在我的桌子上,但我看到
23-MAY-2014 12.00.00.000000000 AM
谁能解释一下我做错了什么
谢谢 您正在调用使用。它只代表一个日期,而不是日期和时间
您应该考虑使用<代码> SETTIMESTATEST。(对于您的特定数据库,可能还有其他方法,但这可能是最简单的通用解决方案):
标准的
DATE
SQL类型没有任何与之关联的时间信息,因此请说明:
为了符合SQL日期的定义,必须通过将实例关联的特定时区中的小时、分钟、秒和毫秒设置为零来“规范化”java.SQL.DATE实例包装的毫秒值
您将希望使用一个。它对应于SQL类型TIMESTAMP
,它保存日期和时间数据。java.time
旧式日期时间API(java.util
date-time类型及其格式化API,SimpleDateFormat
)已过时且容易出错。建议完全停止使用它,并切换到java.time
,即*
使用现代日期时间API的解决方案:
LocalDateTime
:LocalDateTime
的实例设置到数据库中:*无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7。如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并确认。 相关:检查Jon的回答。
long dateLong = date.getTime();
insertStatement.setTimestamp(1, new java.sql.Timestamp(dateLong));
String dateAndTime = "5/23/14 02:23:24";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("M/d/uu H:m:s", Locale.ENGLISH);
LocalDateTime ldt = LocalDateTime.parse(dateAndTime, dtf);
Statement st = conn.createStatement();
PreparedStatement st = conn.prepareStatement("INSERT INTO mytable (columnfoo) VALUES (?)");
st.setObject(1, ldt);
st.executeUpdate();
st.close();
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM mytable WHERE ...");
while (rs.next()) {
LocalDateTime ldt = rs.getObject(1, LocalDateTime.class));
System.out.println(ldt);
}
rs.close();
st.close();