在项目开发中,遇到了mysql5.7数据库相关的时区问题。整理如下:

问题一:在使用swagger测试接口时,数据库记录的时间和输入的不一致。如下图:



swagger中输入的是:"receiveStopTime": "2022-06-09 14:00:00"

数据库中记录的是:"receiveStopTime": "2022-06-09 06:00:00"(少了8小时)

解决方法一:

windows系统:设置mysql5.7服务的时区方法

1.在安装mysql的目录中找到my.ini文件,在文件中添加时区参数(东八区):

点击查看代码
[mysql]

# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#设置3306端口
port=3306
# 设置mysql的安装目录
basedir=E:\environment\mysql-5.7.19-winx64\mysql-5.7.19-winx64
# 允许最大连接数
max_connections=1000
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
#设置默认时区
default-time-zone=+8:00
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB # 设置mysql数据库的数据的存放目录
datadir=E:\environment\mysql-5.7.19-winx64\mysql-5.7.19-winx64\data

2.在springboot项目中,controoler接口的参数使用@RequestBody注解,并且在dto上把和时间有关的字段加上 @JsonFormat注解:

点击查看代码-controoler接口
 @PostMapping("/add")
@ApiOperation("新增接单时间")
public Result add(@RequestBody MasterReceiveOrderTimeDTO dto ) {
masterReceiveOrderTimeService.add(dto);
return new Result().ok("新增接单时间-成功!");
}
点击查看代码-dto
package cn.itcast.master.modules.masterReceiveOrderTime.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import java.io.Serializable;
import java.util.Date; /**
* @Classname MasterReceiveOrderTimeDTO
* @Description 师傅接单时间管理-前端需要传的参数
* @Date 2022/2/21 11:35
* @Created by 小郭
*/
@Data
public class MasterReceiveOrderTimeDTO implements Serializable {
private static final long serialVersionUID = 1L; @ApiModelProperty(value = "师傅入驻表id")
private String masterWorkerId; @ApiModelProperty(value = "接单开始时间")
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
private Date receiveStartTime; @ApiModelProperty(value = "接单结束时间")
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
private Date receiveStopTime; }

3.在springboot项目中,给前端用户返回的时间字段上添加@JsonFormat注解:

点击查看代码-vo
@Data
public class MasterReceiveOrderTimeVO implements Serializable {
private static final long serialVersionUID = 1L; @ApiModelProperty(value = "主键id")
private String id; @ApiModelProperty(value = "接单状态:0-不接单,1-接单(默认为1-接单)")
private Integer receiveStatus; @ApiModelProperty(value = "接单开始时间")
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
private Date receiveStartTime; @ApiModelProperty(value = "接单结束时间")
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
private Date receiveStopTime; }

linux系统:使用docker安装的mysql5.7,设置mysql5.7服务的时区方法

1.进入Docker里面的mysql容器里面:

docker exec -it mysql /bin/bash

2.密码登录:

mysql -u root -p root

3.安装vim(这里的安装,是指在容器中安装,如果没有安装的话,就先安装,安装了的跳过这一步)

apt-get update

apt-get install vim

4.编辑配置文件

vim /etc/mysql/mysql.conf.d/mysqld.cnf

在文件中加入

default-time-zone=+8:00

保存退出

5.重启镜像

docker restart mysql

解决方法 二(推荐):

该方法就和设置mysql数据库的时区没什么关系了,直接在项目的配置文件中设置连接数据库的参数,直接跳过数据库本身的时区,(这个方法比较好用,不用关心数据库的时区问题)

1.在项目的application.yml配置文件中设置数据库连接参数

jdbc:mysql://服务器ip:3306/jjb?useUnicode=true&characterEncoding=utf-8&useTimezone=true&serverTimezone=GMT%2B8&useSSL=false

注意useTimezone=true这个参数,为true,才会跳过数据库的时区

OK,直接解决问题

java时区相关问题(被恶心到了)的更多相关文章

  1. Java时区问题

    Java时区相关 时间格式 UTC是以原子时计时,更加精准,适应现代社会的精确计时.不过一般使用不需要精确到秒时,视为等同.GMT是前世界标准时,UTC是现世界标准时.每年格林尼治天文台会发调时信息, ...

  2. 一文解决MySQL时区相关问题

    前言: 在使用MySQL的过程中,你可能会遇到时区相关问题,比如说时间显示错误.时区不是东八区.程序取得的时间和数据库存储的时间不一致等等问题.其实,这些问题都与数据库时区设置有关,本篇文章将从数据库 ...

  3. JAVA开发相关

    JAVA开发相关1. IntelliJ IDEA开发工具熟练使用2. Maven3. Spring框架(IoC.AOP) 1)数据库相关MyBatis 2)数据库连接池 3)事务.多数据源.跨数据库分 ...

  4. 获取Java系统相关信息

    package com.test; import java.util.Properties; import java.util.Map.Entry; import org.junit.Test; pu ...

  5. java接口相关例题

    java接口相关习题 interface Graphics{  //接口里面只能用抽象方法  public abstract double area();    }//设置 平面类class Plan ...

  6. java线程相关

    java线程相关 java 线程 1 线程的状态 This is an example of UML protocol state machine diagram showing thread sta ...

  7. Java线程相关的热门面试题

    ---恢复内容开始--- 下面是Java线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序 ...

  8. redis安装 phpredis Jedis 扩展的实现及注意事项,php,java,python相关插件安装实例代码和文档推荐

    redis安装 phpredis Jedis 扩展的实现及注意事项,php,java,python相关插件安装实例代码和文档推荐 1.Redis 官方网站下载: http://redis.io/dow ...

  9. Java Web相关技术(汇聚页)

    Java Web相关技术(汇聚页) 初学Java Web(2)——搭建Java Web开发环境

  10. Java多线程相关的

    很多小伙伴在学习Java的时候,总是感觉Java多线程在实际的业务中很少使用,以至于不会花太多的时间去学习,技术债不断累积!等到了一定程度的时候对于与Java多线程相关的东西就很难理解,今天需要探讨的 ...

随机推荐

  1. 利用 Nginx 反向代理搭建本地 yum 服务器

    在政府,医院等单位有网络安全要求,对内外网进行物理隔离,然而内网主机无法访问互联网下载安装包,通过Nginx 反向代理搭建本地yum服务器实现内网主机安装包下载. Centos 8.2 部署 Ngin ...

  2. 驱动开发:内核CR3切换读写内存

    首先CR3是什么,CR3是一个寄存器,该寄存器内保存有页目录表物理地址(PDBR地址),其实CR3内部存放的就是页目录表的内存基地址,运用CR3切换可实现对特定进程内存地址的强制读写操作,此类读写属于 ...

  3. 用AR Engine手部骨骼跟踪能力实现虚拟手表试戴

    AR技术的落地应用,推动着电商领域的不断升级,通过增强现实为用户带来了虚拟与现实结合的AR购物体验.如AR试衣.AR试鞋.AR试妆等功能的出现让用户在手机上就能体验产品的佩戴效果,可以让用户更直观.更 ...

  4. 如何通过执行SQL为低代码项目提速?

    见多了SQL为代码开发提速,那么当低代码遇到SQL会擦出怎样的火花呢?本文将低代码和SQL结合进行介绍,让大家了解如何通过执行SQL为低代码项目提速. 背景 自从计算机诞生的一刻起,如何让计算机能够按 ...

  5. input 禁用历史下拉框

    autocomplete="off" 用法:<input id="inp1" autocomplete="off" />

  6. proxy解决跨域问题

    首先我们在本地开发,域名都是localhost,当我们需要请求后台数据时,就会出现跨域的问题 下面就是在vue.config.js配置文件里: devServer: {     proxy: {    ...

  7. 欢迎来到ktq_cpp的cnblog

    欢迎来到ktq_cpp的cnblog 初学html,可能排版有一些问题,望指教 我的洛谷博客 我的AtCoder账号

  8. SpringBoot实战派读书笔记---响应式编程

    1.什么是WebFlux? WebFlux不需要Servlet API,在完全异步且无阻塞,并通过Reactor项目实现了Reactor Streams规范. WebFlux可以在资源有限的情况下提高 ...

  9. 超好用的截图软件Snipaste(包含安装包)、如何设置Snipaste开机自启

    文章目录 1.设置开机自动启动 2.基本使用 链接: https://pan.baidu.com/s/1oR2qkOZl5-etPxr7kWip7Q 提取码:8888 1.设置开机自动启动 2.基本使 ...

  10. 《Java并发编程的艺术》读书笔记:一、并发编程的目的与挑战

    发现自己有很多读书笔记了,但是一直都是自己闷头背,没有输出,突然想起还有博客圆这么个好平台给我留着位置,可不能荒废了. 此文读的书是<Jvava并发编程的艺术>,方腾飞等著,非常经典的一本 ...