mysql/mybatis/java中的时区转换

一、Java中

Unix服务器和数据服务器在一个时区就可以了,传的4.22 0点的时间戳。实际上并的是相对70.1.1 日 8:00的时间戳,并不是相对70.1.1 日的时间戳。只要大家有一致的偏移量,就不会有问题

date里面存的就是long,即当前距离标准时间的时间戳,date的打印,SimpleDateFormat的parse,都是根据操作系统当前的时区做了转换。前端传过来也是一个距离标准时间的时间戳。

二、mysql数据库中

2.0 system_time_zone 及 time_zone参数

show variables like "%time_zone";

全局参数system_time_zone
系统时区,在MySQL启动时会检查当前系统的时区并根据系统时区设置全局参system_time_zone的值。

全局参数time_zone

用来设置每个连接会话的时区,默认为system时,使用全局参数system_time_zone的值。

可以认为system_time_zone是一个时区底层数据,真正生效的时区设置是time_zone,time_zone可以选择数据来源为system_time_zone,也可以自定义设置。

2.1 DateTime

DateTime 类型是没有时区信息的(时区无关),当你的时区更换之后,比如你的服务器更换地址或者更换客户端连接时区设置的话,就会导致你从数据库中读出的时间错误。

2.2 Timestamp

Timestamp 和时区有关,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。说简单点就是在不同时区,查询到同一个条记录此字段的值会不一样。timestamp类型每次读取、存入都要做时区转换,额外的性能消耗,好处是数据访问可以随时区变化

三、mybatis对时区的处理

会读取连接的数据库的时区,做一个转换。转换成UTC时间戳的date类型变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值