Как я могу получить правильную дату моего запроса Mysql, не вычитая сам запрос один день до даты - PullRequest
0 голосов
/ 28 мая 2018

Моя проблема в том, что в таблице моей базы данных с 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;
}

Класс «Asegurados» имеет атрибут типа «java.sql.date».«определено, чтобы получить» rs.getdate (Fecnac).

Чтобы быть уверенным в значениях, возвращаемых запросом, в моем коде вы можете видеть, что я создал «System.out.println»для каждой даты поля и во всех трех я получаю одно и то же значение из даты с одним днем ​​меньше.

Может кто-нибудь помочь мне узнать, что происходит?

Отладка консоли Изображение IntelliJ Idea

1 Ответ

0 голосов
/ 31 мая 2018

Я уже нашел решение.В части моего кода параметр часового пояса был определен как: 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 , которая является зоной, которая соответствует мне, и готова!дата отображается правильно.

...