Date型的数据插入数据库时间被改变的一些问题记录。

一、插入数据库总是早一天

Date型的数据插入数据库,发现总是早一天。

  • 问题原因:是由于JDBC的时区和当前不一致导致的。
    mysql默认的是美国的时区,而我们中国大陆要比他们迟8小时,应该采用+8:00格式

  • 查看数据库时区
    show variables like "%time_zone";

  • 解决方式:在JSBC连接的时候与数据库时区保持一致,java默认的应该是系统时区或者是世界时
    如果数据库时区是 CST 或者 世界时(GMT/UT)+8,那么JDBC连接参数中要加入serverTimezone=GMT%2B8,如下

dbc:mysql://localhost:3306/boo?useUnicode=ture&characterEncoding=UTF-8&serverTimezone=GMT%2B8

二、回显到前端会早一天

问题原因:依旧是时区问题,导致数据库跟java虚拟机读出来的时间不一致
应针对字段进行时区处理,例如 @JsonFormat注解中就有设置时区的属性 – timezone

/** 创建时间 */@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")private Date createTime;

三、夏令时问题

这个问题就是就算是你时区保持一致了,但是在某些时间还是会出现时间不一致的情况

  • 问题原因:
    根据夏令时规定,在规定的时间段内,时针会自动回拨一小时(详见下方扩展)。
    那么当你用Date格式记录日期的时候,例如出生日期“1991-06-16”(此日期在夏令时内),Date中记做‘‘1991-06-16 00:00:00’’,那么插入数据库时日期就会被最终记录成 “1991-06-15 23:00:00”,再次读出来的话就是“1991-06-15”,提前了一天…

解决:
这个问题由于人们认知与实际规定的差异,所以基本无解。好在夏令时实行时间是1986 - 1992年之间,一般项目中涉及这个时间段的只有生日,而生日一般记做 yyyy-MM-dd , 根据夏令时的特性,将生日字段特殊处理 ---- 默认给时间+1小时,即 1996-10-13 在后台处理为 1996-10-13 01,这样在存入数据库时就算因为夏令时时针回拨1小时,那生日依旧是 1996-10-13 00 ,这样就不会出现生日提前一天的情况了。注意这种情况,生日在取得时候取到dd,存的时候+1h,否则累加hh会出错。

扩展:

夏令时

夏令时,(Daylight Saving Time:DST),也叫夏时制,又称“日光节约时制”和“夏令时间”,是一种为节约能源而人为规定地方时间的制度,在这一制度实行期间所采用的统一时间称为“夏令时间”。一般在天亮早的夏季人为将时间调快一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。各个采纳夏时制的国家具体规定不同。全世界有近110个国家每年要实行夏令时。
1986年4月,中国中央有关部门发出“在全国范围内实行夏时制的通知”,具体做法是:每年从四月中旬第一个星期日的凌晨2时整(北京时间),将时钟拨快一小时,即将表针由2时拨至3时,夏令时开始;到九月中旬第一个星期日的凌晨2时整(北京夏令时),再将时钟拨回一小时,即将表针由2时拨至1时,夏令时结束。从1986年1991年的六个年度,除1986年因是实行夏时制的第一年,从5月4日开始到9月14日结束外,其它年份均按规定的时段施行。在夏令时开始和结束前几天,新闻媒体均刊登有关部门的通告。1992年起,夏令时暂停实行。

  • 关键内容

    • 夏令时实行年份: 1986 - 1992 之间,不包括1992
    • 时间为:每年从四月中旬第一个星期日的凌晨2时到九月中旬第一个星期日的凌晨2时整
    • 调整:时针往前回拨一小时,即 1986-05-04 00:00:00 回拨一小时 为 1986-05-03 23:00:00、
      1986-05-04 01:00:00 回拨一小时 为 1986-05-04 00:00:00
    • 其时间分别是:
      1986年:05-04 02 ~ 09-14 02
      1987年:04 -12 02 ~ 09-13 02
      1988年:04 -10 02 ~ 09-11 02
      1989年:04 -17 02 ~ 09-17 02
      1990年:04 -15 02 ~ 09-16 02
      1991年:04 -14 02 ~ 09-15 02

日期时间存入数据库会差一天?相关推荐

  1. JS 前端获取系统当前时间存入数据库datetime可识别格式(yyyy-mm-dd HH:mm:ss)

    SQL 获取当前时间 select getdate() JS获取当前时间 getDate() 获取日 1-31 getDay () 获取星期 0-6(0代表周日) getMonth () 获取月 0- ...

  2. db2取数据库日期时间_DB2数据库取得当前时间的正确解析

    此文章主要向大家讲述的是DB2数据库取得当前时间的正确解析,如果你对DB2数据库取得当前时间的正确解析心存好奇的话,以下的文章将会揭开它的神秘面纱,以下就是文章的主要内容的详细描述,望大家在浏览之后会 ...

  3. java 获取当前时间存入数据库

    场景:这个需求用于更新时间和创建时间,简单记录下

  4. JAVA SpringBoot 获取系统时间 存入数据库

    java.util.Date day=new Date();SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss&q ...

  5. 谈谈数据库中的日期、时间、日期时间、时间戳

    最近翻看以前的笔记,发现对于数据库日期时间和时间戳还不是太明白.下面从网上搜了下,整理到下面** Date 包含年月日如:2008-03-21 ,Time时间:19::00:00 在数据库中存储插入数 ...

  6. Java日期时间类及计算

    1. Java中与日期相关的类 1.1 java.util包 类名 具体描述 Date Date对象算是JAVA中历史比较悠久的用于处理日期.时间相关的类了,但是随着版本的迭代演进,其中的众多方法都已 ...

  7. 80 个例子,彻底掌握Python日期时间处理

    日常工作中,用 Python 处理时间格式的数据是非常常见的,今天就来分享 DateTime 相关的示例. 文章很长,高低要忍一下,如果忍不了,那就收藏吧,总会用到的! 使用 time 模块展示当前日 ...

  8. easyexcel 日期类型 convert_数据库的几种日期时间类型,你真的会用吗?

    日期和时间是每个系统,每个数据库设计必不可少的部分.也是容易被大家忽视的部分.很多开发者可能根本不了解以不同类型存储日期和时间意味着什么. 有朋友可能会说,数据库定义一个datetime或timest ...

  9. mysql 日期_Mysql数据库常见函数(下)——日期时间函数

    前两期我们分别学习了Mysql数据库中常见的字符函数和数值函数,那么本期我们一起来学习Mysql数据库中常见的日期时间函数. ADDDATE(d,n):计算起始日期 d 加上 n 天的日期 实例: S ...

最新文章

  1. pandas.DataFrame.multiply()含义解释
  2. 数据结构--快速排序
  3. java AES加密
  4. 我是如何零基础入门前端开发的(2021 版)
  5. jq处理返回来json_4个小窍门,让你在Python中高效使用JSON
  6. 实战经验:从内存故障到CPU过高诊断-直播预告
  7. Redis info信息(转载)
  8. BigDecimal用法介绍
  9. Exponential notation 思维题
  10. python mysql捕获异常_python mysql无法捕获异常
  11. 项目在linux下运行情况,Linux系统下部署项目的设置方法
  12. [转载] 3 idiots
  13. Xamarin自学教程(Android)之一
  14. 【DSP】TMS320C64x系列--SPRU871参考手册--中断控制器部分
  15. SBUS转485增程方案,SBUS控制远程机器人方案
  16. 网络文件存储系统(三)fastdfs分布式文件系统实战
  17. style 标签属性 scoped 的作用和原理
  18. 多线程读写大量数据到excel
  19. VB .bas文件生成dll并且调用
  20. 纳米二氧化硅修饰中孔ZSM-5沸石微球/含钆介孔二氧化硅海藻酸钠纳米微球

热门文章

  1. Java架构师成长之道之Java架构师技术栈
  2. handler.post和handler.sendMessage的区别和联系
  3. Hack The Box - Starting Point - TIER 0
  4. 【Java基础】实例与实例化
  5. Java极速入门系列:第一章Java概述、Java环境、IDEA开发工具
  6. coco数据集大小分类_VOC、COCO数据集类别
  7. C语言和JAVA的关联
  8. 分子动力学开源分析软件MDAnalysis安装介绍及使用
  9. SIR传染模型Matlab代码,sir传染病模型 MATLAB代码运行不了,
  10. r语言 转录本结构及丰度_桑基图的绘制核心微生物组分类学及丰度展示