【问题标题】:Convert String To Java.sql.Date将字符串转换为 Java.sql.Date
【发布时间】:2014-05-27 15:38:48
【问题描述】:

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

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

程序运行时他可以选择某个日期查询数据库等等问题

我已经成功地使用 string.split 创建了一个格式为 yyyy/MM/dd 的字符串,并将其保存到一个数组中并在另一个字符串中对其进行排序

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

谢谢,

【问题讨论】:

    标签: java mysql string date jdbc


    【解决方案1】:

    有没有办法将此字符串 (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) 构造函数。

    【讨论】:

    • 感谢 Braj 提供了一种享受,我只是将格式化的字符串插入而不是“2014/04/13”。在过去的 2 个小时里,我真的很烦。即使 java.sql.date 是一个子类,也没有想到引入 java.util.date。再次欢呼
    • 是的,你可以用同样的方式做到这一点java.util.Date newUtilDate=new java.util.Date(sqlDate.getTime());
    • 我背后的逻辑是两个类的构造函数中使用的毫秒数。
    • getTime() 返回此 Date 对象表示的自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数。
    • 您的数据库中是否有任何日期早于 1970 年 1 月 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());
    

    【讨论】:

    • 抱歉,您使用mm 代替了MM。那是错的。我已经发布了。请再看一遍。
    • 仅供参考,精心设计的 java.sql.Date 类已被 java.time.LocalDate 取代。
    【解决方案3】:

    tl;博士

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

    java.time

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

    LocalDate 类表示仅日期值,没有时间,也没有 time zone 或 offset-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.Date、Calendar 和 SimpleDateFormat。

    Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

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

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

    从哪里获得 java.time 类?

    ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如Interval、YearWeek、YearQuarter 和more。

    【讨论】:

      猜你喜欢
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-06
      • 2011-08-29
      • 2017-07-13
      • 2013-01-27
      相关资源
      最近更新 更多