如何将字符串解析为 java.sql.date

Posted

技术标签:

【中文标题】如何将字符串解析为 java.sql.date【英文标题】:How to parse String to java.sql.date 【发布时间】:2012-10-11 16:13:05 【问题描述】:

我有一个字符串

String s = "01 NOVEMBER 2012";

然后我想将其解析为 sqlDate。并将其插入数据库。

是否可以将该字符串解析为 sqlDate?!?!

是的,sql日期格式是“yyyy-mm-dd”

【问题讨论】:

虽然在 2012 年问这个问题时,java.sql.Date 是我们用来在 SQL 数据库之间传输没有时间的日期的类,但今天最好使用来自 @987654321 的 LocalDate @. 【参考方案1】:

使用SimpleDateFormat将String日期解析为java.util.Date

java.util.Date utilDate = new SimpleDateFormat("dd MMM yyyy").parse("01 NOVEMBER 2012");

然后使用millis将其转换为java.sql.Date

java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());

【讨论】:

使用java.sql.Date.valueOf()!这样更好。 java.sql.Date.valueOf() 适用于 JDBC 日期转义格式。格式为“yyyy-[m]m-[d]d” 它不适用于所有日期格式。【参考方案2】:

java.time

我正在提供现代答案。我建议您使用现代 Java 日期和时间 API java.time 进行日期工作。

    DateTimeFormatter dateFormatter = 
        new DateTimeFormatterBuilder()
            .parseCaseInsensitive()
            .appendPattern("dd MMMM uuuu")
            .toFormatter(Locale.ENGLISH);
    
    String s = "01 NOVEMBER 2012";
    
    LocalDate date = LocalDate.parse(s, dateFormatter);
    
    System.out.println(date);

输出:

2012-11-01

您要求java.sql.Date?很可能你不需要任何东西。我假设您想要一个用于您的 SQL 数据库。从 JDBC 4.2 开始,您也可以在那里使用LocalDate。例如:

    PreparedStatement statement = yourDatabaseConnection.prepareStatement(
            "insert into your_table (your_date_column) values (?);");
    statement.setObject(1, date);
    statement.executeUpdate();

注意使用PreparedStatement.setObject()(不是setDate())。

如果您确实需要 java.sql.Date 用于尚未升级到 java.time 的旧版 API,则转换简单明了:

    java.sql.Date oldfashionedJavaSqlDate = java.sql.Date.valueOf(date);
    System.out.println(oldfashionedJavaSqlDate);

2012-11-01

链接

Oracle tutorial: Date Time 解释如何使用 java.time。 相关问题:Insert & fetch java.time.LocalDate objects to/from an SQL database such as H2

【讨论】:

【参考方案3】:

扩展 Jigar Joshi 的答案。

这段代码已经能够处理我需要的任何东西。

import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;

Date date1;
Date date2;
Date date3;

    //converting string into sql date);
    try 
         date1 = new java.sql.Date(
                     ((java.util.Date) new SimpleDateFormat("dd MMM yyyy").parse("01 NOVEMBER 2012")).getTime());

        date2 = new java.sql.Date(
                    ((java.util.Date)newSimpleDateFormat("dd/MM/yyyy").parse("02/09/2012")).getTime());

        date3 = new java.sql.Date(
                    ((java.util.Date) new SimpleDateFormat("ddMMyyyy").parse("03092012")).getTime());

     catch (ParseException e) 
            e.printStackTrace();
        

    System.out.println("sqlDate test1:" + date1);
    System.out.println("sqlDate test2:" + date2);
    System.out.println("sqlDate test3:" + date3);


    output:
           sqlDate test1:2012-11-01
           sqlDate test2:2012-09-02
           sqlDate test3:2012-09-03

【讨论】:

以上是关于如何将字符串解析为 java.sql.date的主要内容,如果未能解决你的问题,请参考以下文章

如何将字符串解析为 java.sql.date

如何将字符串解析为无类型

如何将 JSON 字符串解析为 ListView?

python解析excel,如何将long转换为字符串? [复制]

如何将数组中的真假字符串解析为布尔值

如何将字符串转换为 JSON,以便我可以将其解析为对象