在项目开发中,遇到了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. 12. Fluentd部署:多Workers进程模式

    介绍如何使用Fluentd的多worker模式处理高访问量的日志事件.此模式会运行多个worker进程以最大利用多核CPU. 原理 默认情况下,一个Fluentd实例会运行一个监控进程和一个工作进程. ...

  2. 使用nginx部署Django静态文件配置

    首先,我们配置静态文件,要在setting.py里面加入如下几行代码: # settings.py # the settings above # STATIC SETTINGS STATIC_URL ...

  3. vscode展示子文件夹

    取消勾选设置-功能-compact Folders

  4. MySQL数据库-数据表(上)

    数据表的基本操作. MySQL 数据库支持多种数据类型,大致可以分为 3 类:数值类型.日期和时间类型.字符串(字符)类型. (1)数值类型 数值类型用于存储数字型数据,这些类型包括整数类型(TINY ...

  5. H5调用微信支付

    这里用的是 vue项目; 首先在mounted中判断是否有openId,如果没有,则去获取 let openid = localStorage.getItem('openid'); if (!open ...

  6. JavaScript基本语法(JavaScript代码嵌入方式与声明和使用变量)

    .JavaScript代码嵌入方式 #①HTML文档内 JavaScript代码要写在script标签内 script标签可以写在文档内的任意位置 为了能够方便查询或操作HTML标签(元素)scrip ...

  7. 动词时态=>4.将来时态和过去将来时态构成详解

    将来时态构成详解 使用助动词will构成的将来时态 一般将来时态 与一般过去时态相反(时间上) 如果说 一般过去,我们将其当做一张照片 从这张照片当中,我们无法得知 动作什么时候开始 什么时候结束 只 ...

  8. 蓝桥杯赛前复习C++

    C标准库常用函数 memset函数:暴力清空 void *memset(void *str, int c, size_t n) str -- 指向要填充的内存块. c -- 要被设置的值.该值以 in ...

  9. Python基础部分:5、 python语法之变量与常量

    目录 python语法之变量与常量 一.什么是变量与常量 1.什么是变量 2.什么是常量 二.变量的基本使用 1.代码中如何记录事物状态 2.变量使用的语法结构与底层原理 3.变量名的命名规范 4.变 ...

  10. 从BeanFactory源码看Bean的生命周期

    下图是我搜索"Spring Bean生命周期"找到的图片,来自文章--Spring Bean的生命周期 下面,我们从AbstractAutowireCapableBeanFacto ...