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多线程相关的东西就很难理解,今天需要探讨的 ...
随机推荐
- Docker — 从入门到实践(v1.2.0)
在线地址:https://www.bookstack.cn/read/docker_practice-1.2.0 pdf文件下载地址:https://files.cnblogs.com/files/s ...
- 内网横向渗透 之 ATT&CK系列一 win7的yxcms
Yxcms渗透 前言 通过phpMyAdmin慢日志查询Getshell后,蚁剑连接,发现win7下面还有个cms靶场,于是就兴致勃勃的去打了一波. cms渗透 进入页面后,搜刮了页面所有可见信息,发 ...
- PAT (Basic Level) Practice 1027 打印沙漏 分数 20
本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ***** *** * *** ***** 所谓"沙漏形状",是指 ...
- 从SpringBoot启动,阅读源码设计
目录 一.背景说明 二.SpringBoot工程 三.应用上下文 四.资源加载 五.应用环境 六.Bean对象 七.Tomcat服务 八.事件模型 九.配置加载 十.数据库集成 十一.参考源码 服务启 ...
- Docker Private Registry
Docker Private Registry 目录 Docker Private Registry Docker Registry Docker Private Registry 使用docker- ...
- 聊一聊被 .NET程序员 遗忘的 COM 组件
一:背景 1.讲故事 最近遇到了好几起和 COM 相关的Dump,由于对 COM 整体运作不是很了解,所以分析此类dump还是比较头疼的,比如下面这个经典的 COM 调用栈. 0:044> ~~ ...
- 关于.Net 7.0 RC gRPC JSON 转码为 Swagger/OpenAPI文档的注意事项
大家好,我是失业在家,正在找工作的博主Jerry,找工作之余,看到.Net 7.0 RC2发布了,就想测试下.Net 7.0 RC2 gRPC JSON 转码为 Swagger/OpenAPI文档的特 ...
- Volatile介绍
介绍 volatile 是 Java 虚拟机提供的轻量级的同步机制,它可以保证可见性(缓存一致性协议)和有序性(禁止指令重排序,也就是通过内存屏障来实现),但是不保证原子性. JMM 介绍 JMM 是 ...
- 齐博x1工单碎片模板制作教程
可以把工单插入到任何频道的内容里边,如下图所示 碎片模板制作标准如下 <form action="{:urls('order/add')}" class="wn_f ...
- nginx.conf指令注释
nginx.conf指令注释 ######Nginx配置文件nginx.conf中文详解##### #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于C ...