【问题标题】:Convert a string to date for database [duplicate]将字符串转换为数据库的日期[重复]
【发布时间】:2017-09-09 18:09:33
【问题描述】:

我正在尝试将字符串转换为日期类型,以便将某人上次登录的当前时间保存到我的数据库中。数据库中的字段仅采用日期类型,而不是它的字符串表示形式。

这是我获取当前日期并对其进行格式化的代码:

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
carrier.setLastUpdateDate(dateFormat.format(date));

错误:

不兼容的类型:字符串无法转换为日期

【问题讨论】:

  • that 代码无法通过 that 错误消息编译的唯一方法是将 setLastUpdateDate 的参数设为 Date .由于format 返回String,你会得到确切的编译错误。如果setLastUpdateDate 的参数是Date,为什么要对SimpleDateFormat 做任何事情?使用做carrier.setLastUpdateDate(new Date());

标签: java database date


【解决方案1】:

解析,而不是格式化

format 命令生成一个字符串,而您试图做相反的事情,解析一个字符串。所以你应该打电话给parse

避免使用旧的日期时间类

另一个问题:您正在使用麻烦的旧日期时间类,它们现在是遗留的,被 java.time 类所取代。

避免使用DateCalendarSimpleDateFormat 以及不在 java.time 包中的其他人。

仅限日期,而非日期时间

另一个问题:您正在使用日期时间类来表示仅日期值。

LocalDate 类表示没有时间和时区的仅日期值。

ISO 8601

无需指定解析模式。您的输入恰好是标准的ISO 8601 格式。 java.time 类在解析和生成字符串时默认使用标准格式。

LocalDate ld = LocalDate.parse( "2017-01-23" ) ;

在数据库中使用对象,而不是字符串

另一个问题:您正在使用字符串与数据库进行通信,而不是使用适当的数据类型(对象)。

使用符合 JDBC 4.2 的 JDBC 驱动程序将 java.time 对象直接传递到您的数据库。致电PreparedStatement::setObject

String sql = "INSERT INTO tbl_ ( when_ ) VALUES ( ? ) ; " ;
PreparedStatement ps = connection.prepareStatement( sql ) ;
ps.setObject( 1 , ld ) ;  // Pass the java.time object directly.

换个方向,使用ResultSet::getObject

LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;

【讨论】:

    【解决方案2】:

    数据库中的字段仅采用 date 类型,而不是 string 表示它。

    您的错误很明显,您不能在日期类型中设置字符串,因此不要将日期转换为字符串,而是像这样设置日期:

    carrier.setLastUpdateDate(new Date());
    

    【讨论】:

    • 我想知道为什么这个答案被否决了。我显然agree with the answer。 YCF_L,也许你需要解释得更清楚,例如就像我在那条评论中所做的那样?来自我的 +1。
    • 谢谢@Andreas,我很欣赏你的公平行为,是的,你在评论中所说的是真的
    【解决方案3】:

    试试这个:

    DateFormat df = new SimpleDateFormat("MM-dd-yy");
    Date d=new Date();
    String date1 = df.format(d);
    java.sql.Date date2 = new java.sql.Date(d.getTime());
    System.out.println(date1);
    System.out.println(df.format(date2));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-24
      • 2012-07-30
      • 2012-11-25
      • 2011-08-30
      • 2017-11-20
      • 1970-01-01
      相关资源
      最近更新 更多