Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将日期格式从Java转换为SQL_Java_Sql - Fatal编程技术网

将日期格式从Java转换为SQL

将日期格式从Java转换为SQL,java,sql,Java,Sql,我有一个Java Swing表单中的输入字段,它接受以下格式的日期 年月日 我使用以下命令将其转换为SQL日期格式 SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy"); java.util.Date inputDate = format.parse(date); sqlDate = new java.sql.Date(inputDate.getTime()); 但是在我的SQL表中,日期写为2020-12-12。我如何改变这

我有一个Java Swing表单中的输入字段,它接受以下格式的日期

年月日

我使用以下命令将其转换为SQL日期格式

SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
java.util.Date inputDate = format.parse(date);
sqlDate = new java.sql.Date(inputDate.getTime());
但是在我的SQL表中,日期写为2020-12-12。我如何改变这个?我知道我可能在这里使用了一些遗留类型,但它不是生产代码,所以目前这对我来说并不重要

tl;博士
public static java.sql.Date dataSQL( final java.util.Date dataNormal ) {

    if( dataNormal == null ){
        log.warn("Erro classe Util");
        throw new InvalidParameterException( "Artefato: UtilDatas, Metodo: dataSQL(), " +
                null." );
    }

    Calendar data = Calendar.getInstance();
    data.setTime( dataNormal );
    data.set( Calendar.HOUR_OF_DAY, 0 );
    data.set( Calendar.MINUTE, 0 );
    data.set( Calendar.SECOND, 0 );
    data.set( Calendar.MILLISECOND, 0 );

    java.sql.Date dataSQL = new java.sql.Date( data.getTimeInMillis() );

    return dataSQL;
}
2020-01-23

避免遗留类 不要使用糟糕的遗留日期时间类,例如
java.util.date
java.sql.date
SimpleDataFormat
。这些随着JSR 310的采用而变得过时

仅使用现代java.time类

java.time 将输入字符串解析为
LocalDate
。此类表示仅限日期的值,不含一天中的时间和时区

String input = "23/01/2020" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;
LocalDate ld = LocalDate.parse( input , f ) ;
数据库 但是在我的SQL表中,日期写为2020-12-12

在数据库中定义此类列时,应该使用日期时间数据类型。SQL标准类型是
DATE
。您的数据库可能具有确切的类型名称或其他名称

从JDBC4.2开始,我们可以与数据库交换java.time对象

myPreparedStatement.setObject( … , ld ) ;
检索

LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;
但是,如果您真的以YYYY-MM-DD格式将日期值作为文本写入,那么您应该知道该格式符合标准。默认情况下,在使用java.time类解析/生成文本时使用该标准格式。因此,无需指定格式化模式

String output = ld.toString() ;
和解析

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

所有这些都在堆栈溢出上被多次讨论过。搜索以了解更多信息。

如果数据库中列的数据类型是实际日期类型(即不是varchar),则查看数据时看到的格式只是DBMS软件选择显示数据的方式的产物。如果可以在数据库中保存/读取数据,那么查看表内容时数据的格式就不重要了。不要再使用旧的
java.util.date
SimpleDataFormat
。使用现代的
DateFormatter
java.time
package中的类,通过对数据库运行SQL并查看结果来获取格式吗?或者它真的不是一个日期,而是一个字符串列?不要建议使用旧的
日历
java.util.date
classFYI,有严重缺陷的日期时间类,例如,
java.text.SimpleDateFormat
现在被java 8和更高版本中内置的类所取代。建议在2020年使用它们是拙劣的建议。
LocalDate ld = LocalDate.parse( "2020-01-23" ) ;