我的问题是,在包含7列的数据库表中,我有一列日期类型,名为" Fecnac"。通过 MYSQLworkbrench ,我执行一个简单的查询:
"SELECT * FROM tblAsegurados ORDER BY Name,Nss"
作为此查询的结果,将显示我的列或表的字段的信息,该表包含名为" Fecnac"的列。显示正确的日期,例如" 2018-12-31"。
但是,我在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;对于每个字段日期,在所有三个字段中,我从日期得到相同的值,少一天。
有人能帮助我知道会发生什么吗?
答案 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 ,这是与我对应的区域,已准备就绪!日期显示正确。