java使用mysql的时区问题

最近在工作中遇到个问题,java程序启动后,获取数据库中的datetime类型数据,输出的时间的时区是UTC时区的,而我们所在的时区是东八区(Asia/Shanghai)。

排查过程:
1.查看数据库中的数据记的时间是哪个时区的
– 数据库记的也是UTC时区的时间。
另外也查看了数据库的相关时区变量:

show variables like "%time_zone%";

结果都是东八区;

记录到数据库中是UTC时间是不是问题呢?
–经过一番百度谷歌…
找到了这篇科普
他的结论是:

所以比较好的做法是,数据库中使用DATETIME,然后存时间的时候一律用程序生成UTC时间(而不是local时区的时间)存进去,取出来的时候不管想显示服务器时间还是显示用户的时间都可以处理。
顺便提一句,根据用户所在地时区显示时间有两种做法:
当用户第一次访问网站的时候,用js获取时区发送到服务器上存到session里
用js处理时间的显示(我觉得这种比较方便一点,毕竟不用改服务端代码)

由于我们都是在东八区,为了避免测试人员或者用户对数据库的时间有疑惑,我就直接在JDBC连接指定 serverTimezone=Asia/Shanghai

此时,数据库中记录的时间已经是东八区时间了,当时调用接口查询出来的时间却是UTC时间。
整理一

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是使用Java连接MySQL数据库的基本步骤: 1. 导入MySQL JDBC驱动包。可以从MySQL官网下载JDBC驱动包,然后将其复制到项目的classpath中。 2. 加载JDBC驱动程序。使用以下代码加载MySQL JDBC驱动程序: ``` Class.forName("com.mysql.jdbc.Driver"); ``` 3. 创建连接。使用以下代码创建与MySQL数据库的连接: ``` String url = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC"; String username = "root"; String password = "password"; Connection conn = DriverManager.getConnection(url, username, password); ``` 其中,url为连接字符串,test为要连接的数据库名,localhost为MySQL服务器的地址,3306为MySQL服务器的端口号,useSSL=false表示不使用SSL连接,serverTimezone=UTC表示使用UTC时区,username为MySQL登录用户名,password为MySQL登录密码。 4. 执行SQL语句。可以使用Statement或PreparedStatement对象执行SQL语句。例如: ``` Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM users"); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); String email = rs.getString("email"); // ... } rs.close(); stmt.close(); ``` 5. 关闭连接。使用以下代码关闭与MySQL数据库的连接: ``` conn.close(); ``` 以上就是使用Java连接MySQL数据库的基本步骤。需要注意的是,连接字符串的格式和用户名、密码等信息应该根据实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值