mysql 获取指定时区时间格式,JsonFormat指定时区

服务器的时区是:

FqwVcY6vLSXjJ4tHiYkyC3ujm253

Mysql的时区是:

FiljkQUpH1hfBgOTFGscKlqWEEC5

可以看到系统时区是东八区,而Mysql用了系统时区,在Java使用 Date now = new Date()数据类型,并存入数据库中类型为datetime的对应字段,所存储的时间为东八区时间。数据库中的时间显示:

FoT-KBQ4Tzx9-fLfUdgrwhoL-w2a

当前端需要展示该时间时,使用JsonFormat对时间进行格式化,发现时间被转换成了GMT时间,比数据库中显示的时间少了8个小时:

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

private Date wifiSetTime;

返回给前端的时间:

Fox6Lr28tfkvtUFwFU31PF3KuTt5

为解决这个问题,可以指定JsonFormat的时区,如:

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")

private Date wifiSetTime;

或者:

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")

private Date wifiSetTime;

但是这种方式有个问题,不能灵活根据系统的时区来对时间进行转化,timezone的值不能用一个变量,而如果使用JsonFormat.DEFAULT_TIMEZONE,这个默认时区就是GMT, 所以参考了https://stackoverflow.com/questions/55224233/jsonformat-default-timezone-doesnt-seem-to-be-working, 修改JsonFormat的时区,在获取相关的实体方法所在的服务中加入:

@Autowired

com.fasterxml.jackson.databind.ObjectMapper objectMapper;

在方法中添加:

objectMapper.setTimeZone(TimeZone.getDefault());

至此,返回的时间可以正常了。

PS:使用SimpleDateFormat来format的时候,并不会将时间转为GMT时间,看来SimpleDateFormat的默认时区是取系统的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值