将String转换为Java.sql.Date

时间:2014-04-13 19:12:50

标签: java mysql string date jdbc

查看了stackoverflow中的许多线程后,似乎无法找到正在寻找的正确方法。如果有人能发光,那就太好了。

所以我用SQL日期填充了一个JCombo Box,但是这样做我将它们格式化为使用SimpleDateFormat,它将它们转换为格式为dd / MM / yyyy的字符串。

当程序运行时,他可以选择某个日期来查询数据库,所以这里是问题

我设法使用string.split创建一个格式为yyyy / MM / dd的String,将其保存到一个数组中,然后用另一个字符串对它们进行排序

有没有办法将此字符串(2014/04/13)转换为SQL日期,以便我可以查询我的数据库,或者我发现它不正确

谢谢,

3 个答案:

答案 0 :(得分:3)

  

有没有办法将此字符串(2014/04/13)转换为SQL日期?

示例代码:

    SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");

    try {
        java.util.Date utilDate = format.parse("2014/04/13");
        java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
        System.out.println(sqlDate);
    } catch (ParseException e) {
        e.printStackTrace();
    }

输出:

2014-04-13
  

使用SimpleDateFormat将字符串解析为java.util.Date

     

使用java.sql.Date(miliseconds)构造函数。

答案 1 :(得分:2)

使用java.util.SimpleDateFormat

这里有一个例子:

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
    java.lang.Date langDate = sdf.parse("2014/04/13");
    java.sql.Date sqlDate = new java.sql.Date(langDate.getTime());

答案 2 :(得分:0)

tl; dr

myPreparedStatement.setObject( 
    … , 
    LocalDate.parse( 
        "23/01/2018" , 
        DateTimeFormatter.ofPattern( "dd/MM/uuuu" )
    ) 
) ;

java.time

现代方法使用 java.time 类取代了可怕的Date / Calendar / SimpleDateFormat类。

LocalDate类表示没有日期,没有time zoneoffset-from-UTC的仅日期值。

定义一种格式化模式以匹配您的输入字符串。

String input = "23/01/2018" ; 
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;
LocalDate localDate = LocalDate.parse( input , f ) ;
String output = localDate.toString() ;  // Generate text in standard ISO 8601 format.

JDBC 4.2

从JDBC 4.2开始,我们可以与数据库交换 java.time 对象。使用智能对象而不是哑文本来进行数据库交互。

myPreparedStatement.setObject( … , localDate ) ;

关于 java.time

java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendarSimpleDateFormat

目前位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

在哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore