迄今为止的Java字符串

迄今为止的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

我试图将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.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();