我怎样才能得到mysql查询的正确日期,而不需要查询本身减去迄今为止的一天

qcuzuvrc  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(374)

我的问题是,在一个包含7列的数据库表中,我有一个日期类型的列,称为“fecnac”。通过mysqlworkbrench,我执行了一个简单的查询:

"SELECT * FROM tblAsegurados ORDER BY Name,Nss"

此查询的结果是,将显示表的“我的”列或字段的信息,该表包含一个名为“fecnac”的列,该列显示正确的日期,例如“2018-12-31”。
mysqlworkbrench结果图像
然而,我在intellij idea中开发了一个应用程序来执行相同的查询,查询“本身”返回的日期少了一天,即显示“2018-12-30”。在我的数据库“tblasegurados”表的“fecnac”列中找到的所有日期也是如此。

public ArrayList<Asegurados> getAseguradosList(){
    ArrayList<Asegurados> aseguradosList = new ArrayList<Asegurados>();
    Connection connection = getConnection();
    var query = "select * from tblAsegurados order by Nombre,Nss";
    Statement st;
    ResultSet rs;
    try{
        st = connection.createStatement();
        rs = st.executeQuery(query);
        Asegurados asegurado;
        while(rs.next()){
            asegurado = new Asegurados(
                    rs.getString("Nss"),
                    rs.getString("Nombre"),
                    rs.getString("Curp"),
                    rs.getBoolean("Esposa"),
                    rs.getInt("Semcot"),
                    rs.getInt("Hijos"),
                    rs.getDate("Fecnac"));
            aseguradosList.add(asegurado);

            System.out.println(asegurado.getFecnac());
            System.out.println(rs.getDate("Fecnac"));
            System.out.println(rs.getDate(7));
        }

    } catch (Exception e){
        e.printStackTrace();
    }
    return aseguradosList;
}

类“asegurados”定义了“java.sql.date”类型的属性,以接收“rs.getdate(fecnac)”。
因为我确信​​通过查询返回,在我的代码中,您可以看到我为每个字段日期创建了一个“system.out.println”,并且在这三个字段中,我从日期中得到的值都是相同的,只需少一天。
有人能帮我知道发生了什么吗?
控制台调试intellij idea映像

5cg8jx4n

5cg8jx4n1#

我已经找到解决办法了。在我的代码的一部分中,时区的参数定义为:servertimezone=utc

public static Connection getMySQLConnection() throws Exception {
    String driver = "com.mysql.cj.jdbc.Driver";
    String url = "jdbc:mysql://localhost/imss"+
            "?useUnicode=true&useJDBCCompliantTimezoneShift=true"+
            "&useLegacyDatetimeCode=false&serverTimezone=America/Mexico_City"+
            "&verifyServerCertificate=false"+
            "&useSSL=true"+
            "&requireSSL=true";
    String username = "root";
    String password = "juan1980";
    Class.forName(driver);
    return DriverManager.getConnection(url, username, password);
    }

我将其设置为:servertimezone=america/mexico\u city,这是对应于我的区域,准备好了!日期显示正确。

相关问题