如何在没有查询本身减去一天的情况下获取Mysql查询的正确日期

时间:2018-05-28 11:25:28

标签: mysql date intellij-idea data-conversion

我的问题是,在包含7列的数据库表中,我有一列日期类型,名为" Fecnac"。通过 MYSQLworkbrench ,我执行一个简单的查询:

"SELECT * FROM tblAsegurados ORDER BY Name,Nss"

作为此查询的结果,将显示我的列或表的字段的信息,该表包含名为" Fecnac"的列。显示正确的日期,例如" 2018-12-31"。

MYSQLworkbrench Result image

但是,我在intelliJ IDEA中开发了一个应用程序来执行相同的查询,并且查询"本身"返回日期减去一天,即显示" 2018-12-30"。因此它与所有在" Fecnac" " tblAsegurados"我的数据库中的表。

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;
}

班级&#34; Asegurados&#34;具有类型&#34; java.sql.date&#34;的属性定义,接收&#34; rs.getdate(Fecnac)。

因为我确定查询返回的值,在我的代码中你可以看到我做了一个&#34; System.out.println&#34;对于每个字段日期,在所有三个字段中,我从日期得到相同的值,少一天。

有人能帮助我知道会发生什么吗?

Console debug IntelliJ Idea image

1 个答案:

答案 0 :(得分:1)

我已经找到了解决方案。在我的部分代码中,时区的参数定义为: 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_City ,这是与我对应的区域,已准备就绪!日期显示正确。