在Java中使用now()向数据库中插入当前时间,但是查询出来的时间并不是当前时间
时间: 2024-03-08 18:46:10 浏览: 11
在Java中向数据库中插入当前时间,可以使用以下代码:
```java
java.sql.Timestamp timestamp = new java.sql.Timestamp(System.currentTimeMillis());
PreparedStatement ps = connection.prepareStatement("INSERT INTO my_table (created_at) VALUES (?)");
ps.setTimestamp(1, timestamp);
ps.executeUpdate();
```
其中,`System.currentTimeMillis()`获取的是当前时间的毫秒数,将其转换成`java.sql.Timestamp`类型后,使用`PreparedStatement`的`setTimestamp`方法设置参数,最后执行插入操作即可。
如果查询出来的时间并不是当前时间,有可能是因为数据库使用的是UTC时间,而Java默认使用的是本地时间。可以尝试在查询时将UTC时间转换成本地时间,例如:
```java
PreparedStatement ps = connection.prepareStatement("SELECT created_at FROM my_table WHERE id = ?");
ps.setInt(1, 1);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
java.sql.Timestamp timestamp = rs.getTimestamp("created_at");
java.util.Calendar cal = java.util.Calendar.getInstance();
cal.setTimeInMillis(timestamp.getTime());
java.util.TimeZone tz = java.util.TimeZone.getDefault();
int offset = tz.getOffset(cal.getTimeInMillis());
cal.add(java.util.Calendar.MILLISECOND, offset);
java.util.Date date = new java.util.Date(cal.getTimeInMillis());
System.out.println(date);
}
```
其中,使用`ResultSet`获取到`java.sql.Timestamp`类型的时间后,将其转换成`java.util.Calendar`类型,再获取本地时区与UTC时区的时间差,将其添加到`Calendar`中,最后将`Calendar`转换成`java.util.Date`类型,即可得到本地时间。