java时区相关问题(被恶心到了)
在项目开发中,遇到了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时区相关问题(被恶心到了)的更多相关文章
- Java时区问题
Java时区相关 时间格式 UTC是以原子时计时,更加精准,适应现代社会的精确计时.不过一般使用不需要精确到秒时,视为等同.GMT是前世界标准时,UTC是现世界标准时.每年格林尼治天文台会发调时信息, ...
- 一文解决MySQL时区相关问题
前言: 在使用MySQL的过程中,你可能会遇到时区相关问题,比如说时间显示错误.时区不是东八区.程序取得的时间和数据库存储的时间不一致等等问题.其实,这些问题都与数据库时区设置有关,本篇文章将从数据库 ...
- JAVA开发相关
JAVA开发相关1. IntelliJ IDEA开发工具熟练使用2. Maven3. Spring框架(IoC.AOP) 1)数据库相关MyBatis 2)数据库连接池 3)事务.多数据源.跨数据库分 ...
- 获取Java系统相关信息
package com.test; import java.util.Properties; import java.util.Map.Entry; import org.junit.Test; pu ...
- java接口相关例题
java接口相关习题 interface Graphics{ //接口里面只能用抽象方法 public abstract double area(); }//设置 平面类class Plan ...
- java线程相关
java线程相关 java 线程 1 线程的状态 This is an example of UML protocol state machine diagram showing thread sta ...
- Java线程相关的热门面试题
---恢复内容开始--- 下面是Java线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序 ...
- redis安装 phpredis Jedis 扩展的实现及注意事项,php,java,python相关插件安装实例代码和文档推荐
redis安装 phpredis Jedis 扩展的实现及注意事项,php,java,python相关插件安装实例代码和文档推荐 1.Redis 官方网站下载: http://redis.io/dow ...
- Java Web相关技术(汇聚页)
Java Web相关技术(汇聚页) 初学Java Web(2)——搭建Java Web开发环境
- Java多线程相关的
很多小伙伴在学习Java的时候,总是感觉Java多线程在实际的业务中很少使用,以至于不会花太多的时间去学习,技术债不断累积!等到了一定程度的时候对于与Java多线程相关的东西就很难理解,今天需要探讨的 ...
随机推荐
- Elasticsearch:同步 MongoDB 数据到 Elasticsearch
转载自:https://elasticstack.blog.csdn.net/article/details/114639152 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写 ...
- nexus迁移
1.找到nexus主目录和sonatype-work目录打包,一般在 /usr/local/nexus 和 /usr/local/sonatype-work # tar -czvf nexus.tar ...
- 在 Linux 上安装服务器管理软件 Cockpit
Cockpit 是一个自由开源的服务器管理软件,它使得我们可以通过它好看的 web 前端界面轻松地管理我们的 GNU/Linux 服务器.Cockpit 使得 linux 系统管理员.系统维护员和开发 ...
- PHP全栈开发(七):PHP与MySQL存储交互(1.连接、创建数据库;创建数据表)
在Linux服务器中可以使用命令 mysqladmin -u root password beijing2007; 来修改MySQL的root用户的密码. 但是在我们自己安装了wampserver的电 ...
- spring boot集成redis基础入门
redis 支持持久化数据,不仅支持key-value类型的数据,还拥有list,set,zset,hash等数据结构的存储. 可以进行master-slave模式的数据备份 更多redis相关文档请 ...
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(28)-Fiddler如何抓取Android7.0以上的Https包-下篇
1.简介 虽然依旧能抓到大部分Android APP的HTTP/HTTPS包,但是别高兴的太早,有的APP为了防抓包,还做了很多操作:① 二次加密有的APP,在涉及到关键数据通信时,会将正文二次加密后 ...
- 记一个深层的bug
1. 业务场景 产品需要每隔几天进行一次组件的更新,在自动化测试中,每隔30s检测一次更新源上的某个文件MD5值是否与本地一致,不一致代表有更新的版本,开始更新. 2. 问题出现 一个再平常不过的繁忙 ...
- Unity——射线检测(鼠标点击开关门效果)
Unity射线检测--实现简单的开关门效果 简要:通过鼠标点击来发射一条射线,来获得射线所碰到的物体名称,再通过改变门的Rotation值来实现开关门的效果. 一.代码实现 1.1 简易的场景搭建 注 ...
- Oracle性能优化之运行参数设置
Oracle参数调整建议值 sessions=2150 processes=2000 open_cursors=5120 db_file_multiblock_read_count=64 log_bu ...
- 畅联新接入物联设备的情况:丰宝 智慧消防领域的 NB水压一体机、智能消防栓、NB液位一体机
我看了一下,似乎三种完全不同的协议额...应该是电信AEP平台,由双美接入. ------------------------------------------------------------- ...