首页 > 解决方案 > 如何更改时间戳中的日期格式

问题描述

我正在使用preparedStatement 来更新我的sql 表。目前我的日期格式是 yyyy-mm-dd 如何使它成为 dd-mm-yyyy。

    try {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306?user=root&password=1234&useSSL=false");
        con.setAutoCommit(false);
        pstmt = con.prepareStatement(qry);
        sp = con.setSavepoint();
        System.out.println("Enter your name");
        String name = sc.next();
        System.out.println("Enter your contact number");
        long phoneNum = sc.nextLong();
        System.out.println("Purpose of visit");
        String purpose = sc.next();

        pstmt.setString(1, name);
        pstmt.setLong(2, phoneNum);
        pstmt.setString(3, purpose);

         java.sql.Timestamp  dd = new java.sql.Timestamp(new java.util.Date().getTime());
        pstmt.setTimestamp(4, dd);
        pstmt.setTimestamp(5, dd);
        pstmt.executeUpdate();
        con.commit();

标签: javatimestampprepared-statement

解决方案


可怕的 java.sql.Timestamp类现在是遗留的,从 JDBC 4.2 及更高版本开始不再需要。对于数据库工作,请OffsetDateTime改用,可能调整到/从InstantZonedDateTime.

LocalDate

您似乎只需要日期,没有时间,没有时区或与 UTC 的偏移量。

要表示仅日期,请使用LocalDate类。

LocalDate ld = LocalDate.parse( "2019-01-23" ) ;  // By default, parses strings in standard ISO 8601 format: YYYY-MM-DD. 

要捕获当前日期,请指定时区。

ZoneId z = ZoneId.systemDefault() ;
LocalDate ld = LocalDate.now( z ) ;

要生成表示该值的文本,请使用DateTimeFormatter.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MM-uuuu" ) ;
String output = ld.format( f ) ;

JDBC

LocalDate在类似于标准 SQL 类型的数据类型的列中将对象写入数据库DATE

myPreparedStatement.setObject( … , ld ) ;

从数据库中检索:

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

推荐阅读