如何解决向数据库添加时间戳时,它将仅设置当前时间,而忽略值
因此,我试图将时间戳保存到数据库中,但是由于某种原因添加时间戳时,它将设置当前时间,而忽略timestamp变量的值。 代码:
try (PreparedStatement statement = connection.prepareStatement("INSERT INTO joinMoment (userId,moment) VALUES (?,?);")) {
statement.setString(1,id);
System.out.println("DBTimeStamp: " + timestamp);
statement.setTimestamp(2,timestamp);
statement.executeUpdate();
}
调试消息会打印正确的时间:DBTimeStamp:2020-09-11 19:53:20.454 但是添加到数据库的是:2020-09-11 17:53:20(添加时的当前时间)
解决方法
整数小时或半小时的时间差异表示时区混乱。
如果使用此查询而不是问题中的查询,则不必将时间戳发送到数据库服务器。它将为您处理所有事情。
INSERT INTO joinMoment (userId,moment) VALUES (?,NOW() );
如果您的moment
列是TIMESTAMP
,它将收到UTC时间。当您检索它时,MySQL会将其从UTC转换为连接或服务器的中的时间。
如果它是DATETIME
列,它将接收连接或服务器所在时区的本地时间。
如果确实要将时间戳从Java程序发送到服务器,请记住这一点:Java程序的本地时区应设置为与MySQL连接或服务器时区相同。如果要发送服务器UTC时间戳,请首先发出此SQL命令以设置连接上的时区。
SET time_zone = 'UTC';
如果您不这样做,MySQL将无助于您转换时区。
TIMESTAMP
和DATETIME
之间的区别是MySQL特有的。其他品牌和型号的表服务器以其他方式处理这些问题。
如果要存储这些毫秒,请将moment
列声明为TIMEZONE(3)
或DATETIME(3)
。
我假设您居住在世界标准时间+2.00的国家/地区 因此,您需要先转换时间戳,然后再存储
您可以参考此链接-> Convert UTC java.sql.Time to java.time.localtime with correct DST
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。