java程序的DATE和mysql的TIMESTAMP 差14小时

本文介绍了MySQL中时间字段出现14小时偏差的问题及解决方案。通过调整MySQL全局时区设置,并在JDBC URL中指定时区参数,确保了时间数据的准确性。

今天突然发现 用程序保存的mysql的时间类型字段,差了14小时。

觉的奇怪,一查果然早有人遇到过同样的问题。

也早上有人 找到了解决方案,非常详细值得学习

https://www.cnblogs.com/jason1990/p/10032181.html

解决方案

参照https://juejin.im/post/5902e087da2f60005df05c3d.

mysql> set global time_zone = '+08:00';
Query OK, 0 rows affected (0.00 sec)

mysql> set time_zone = '+08:00';
Query OK, 0 rows affected (0.00 sec)

告知运维设置时区,重启MySql服务,问题解决.

此外,作为防御措施,可以在jdbc url中设置时区(如此设置可以不用修改MySql配置):

jdbc:mysql://localhost:3306/table_name?useTimezone=true&serverTimezone=GMT%2B8

此时,就告知连接进行时区转换,并且时区为UTC+8.

Java不同版本中,MySQLTIMESTAMP类型对应不同的Java类型。在Java8之前,可使用java.sql.Timestampjava.util.Date来对应MySQL中的TIMESTAMP类型,其中java.sql.Timestamp是更精确匹配的类型,因为它专门用于处理数据库中的时间戳数据;而java.util.Date是一个通用的日期时间类,也能表示时间戳信息 [^2]。 在Java8及其之后的版本,建议使用Instant类来对应MySQLTIMESTAMP类型。Instant类是Java 8引入的新日期时间API中的一部分,用于表示时间戳,适合处理跨时区的时间,MySQLTIMESTAMP类型在存储跨时区时间方面的特性相匹配 [^4]。 以下是不同类型对应使用的示例代码: ### Java 8之前使用java.sql.Timestamp ```java import java.sql.Timestamp; public class TimestampExampleBeforeJava8 { public static void main(String[] args) { // 模拟从数据库获取的时间戳 Timestamp timestamp = new Timestamp(System.currentTimeMillis()); System.out.println(timestamp); } } ``` ### Java 8之前使用java.util.Date ```java import java.util.Date; public class DateExampleBeforeJava8 { public static void main(String[] args) { // 模拟从数据库获取的时间戳 Date date = new Date(System.currentTimeMillis()); System.out.println(date); } } ``` ### Java 8及之后使用Instant ```java import java.time.Instant; public class InstantExampleJava8 { public static void main(String[] args) { // 模拟从数据库获取的时间戳 Instant instant = Instant.now(); System.out.println(instant); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值