前后端时间相差8小时的情况分析

搞了快两个小时了,终于解决了这个问题,记录一哈。

问题:

前端pick一个时间,传出数据,到后端,此时发现前端选的是8点,后端输出的是0点,即晚了8小时。

前端pick的数据

前端pick数据

解决

1、找到痛点

打印出前端传出的数据和后端接收的数据
这一步很重要,否则很容易在错误的方向找答案!!!

前端传出数据

前端传出数据

后端接收数据

后端接收数据

2、若前端传出数据错误

2.1 检查前端时间pick控件

在这次Bug中,我用的element ui 中的 el-date-picker 控件,查阅资料后发现是这里的出的bug。
el-date-picker 默认的是国际标准时间(UTC),与北京时间(GMT)相差8小时。
解决方案:添加字段 value-format=“yyyy-MM-dd HH:mm:ss”

 <el-date-picker 
 		v-model="todoform.startTime" 
 		type="datetime" 
 		placeholder="请选择任务开始时间" 
 		value-format="yyyy-MM-dd HH:mm:ss">
 </el-date-picker>
2.2 利用moment格式化
  • 添加moment插件
npm install moment --save
  • main.js导入moment
import Moment from 'moment'
Vue.filter('formatDate', function(value) {
    return Moment(datetime).utcOffset(480).format('YYYY-MM-DD HH:mm:ss'); // 加上480分钟,即8小时
})

3、若后端传入数据错误

注:以下内容整合于自己查阅的博客,自己的问题不在于此,不清楚这种方法的有效度

3.1 SpringBoot 项目

application.properties文件中添加配置

# 配置spring时区
spring.jackson.time-zone=GMT+8
# 时间戳配置
spring.jackson.date-format="yyyy-MM-dd HH:mm:ss"
# 数据库链接设置时区 serverTimezone=GMT%2B8
spring.datasource.url: jdbc:mysql://localhost:3306/[TableName]?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=GMT%2B8

注:在连接数据库的时候,也记得末尾加上?serverTimezone=GMT%2B8

3.2 SpringMVC 项目

在time字段前添加注释

@JsonFormat(shape = JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd HH:mm:ss" timezone = "GMT+8") 
private LocalDateTime endTime;

4、存入数据库数据错误

感谢大佬:https://blog.csdn.net/Architect_CSDN/article/details/93324225

如果有其他情况,欢迎评论补充~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值