一、问题描述

日期字符串1990-6-16转java的Date对象,落库(mysql)后,DB日期显示减少一天(1990-6-15)

二、原因

根本原因:java使用的时区与数据库使用的时区不匹配

1. 1990-6-16处于中国实行夏令时期间
2. 字符串转Date,SimpleDateFormat#parse,jvm默认时区=Asia/Shanghai,会处理夏令时,可以看到CDT夏令时标识

3. db时区=CST,中国标准时区(可以视作东八区时区)

4. 落库时,CDT转CST,时间减一小时,导致日期减一

三、解决办法

SimpleDateFormat#parse时,将时区设置成GMT+8(不会对夏令时处理),字符串1990-6-17转Date后的时间是1990-6-17 01:00:00(相当于CST 1990-6-17 00:00:00),落库后,正常显示为1990-6-17

三、补充

1. CDT和CST

CDT:中国夏令时
CST:CST可以同时表示美国、澳大利亚、中国、古巴四个国家的标准时间,在中国表示 中国标准时
Central Standard Time USA UT-6:00
Central Standard Time Australia UT+9:30
China   Standard Time UT+8:00
Cuba    Standard Time UT-4:00

2. Asia/Shanghai和GMT+8

Asia/Shanghai:中国本地时间(会因为当地政策做特殊处理,例如夏令时),会处理中国夏令时
GMT+8:东八区时间(多个国家可能处在这个时区,统一使用该时区的时间规则,不受各国政策影响),不会处理中国夏令时

3. 夏令时介绍:http://www.cwtea.net/article/9228.html

4. 中国夏令时实行时间区间

四、拓展

有个小小的疑问,如果从db取出时,将数据按照相同规则进行反向转换,是不是就可以得到与输入时一致的结果了。

测试,精度到日期的时间类型,是的。

db为datetime和timestamp,从数据库取出,cst ——> cdt,时间加一小时,正常转换
db字段是date,不可以,因为java Date转数据库date,减去一个小时,带来的影响是,日期-1(1990-06-17 ——> 1990-06-16);数据库date到java Date时,只加一个小时,取出来后1990-06-16 01:00:00

夏令时引起的时间问题相关推荐

  1. GMT、UTC、时区、夏令时、北京时间、本地时间

    关于时区.时间很多开发人员都弄不懂下面我们就来所下这方面的概念,格林威治时间.GMT.UTC.跨时区.夏令时我们彻底来梳理一下它们. GMT GMT(Greenwich Mean Time)格林威治时 ...

  2. 冬令时和夏令时及国外时间处理

    夏令时比标准时快一个小时 冬令时是在冬天使用的标准时间.在使用日光节约时制的地区,夏天时钟拨快一小时,冬天再拨回来.这时采用的是标准时间,也就是冬令时. $timezone = -8 + get_se ...

  3. 转载, 夏令时导致的时间问题

    bug描述 问题起源于同事在项目中新增一个统计用户生日明细的接口,其中一个用户在数据库中的生日日期是"1988-07-29",然而通过rest接口得到该用户的生日日期却为 &quo ...

  4. android自动更新nitz,手机时间、夏令时及Android时间更新方式

    一.时间 时间是指世界的时间,是对某一时刻的表示.手机系统的时间,通常是在状态栏.锁屏界面等表现给用户,让用户知道现在是什么时间.时间分为标准时间和夏令时时间,标准时间是指正常的时间,夏令时是指满足特 ...

  5. Java夏令时导致的时间问题

    1986年至1991年,中华人民共和国在全国范围实行了六年夏令时,每年从4月中旬的第一个星期日2时整(北京时间)到9月中旬第一个星期日的凌晨2时 整(北京夏令时) 我们可以看出在中国的夏令时区间内,因 ...

  6. 时间GMT UTC 夏令时

    GMT GMT 是 Greenwich Mean Time 的缩写,译为中文为"格林威治标准时间"或"格林尼治标准时间",直译的话,可译为"格林威治平 ...

  7. 判断德国时间冬令时和夏令时

    最近在处理时间上碰到一个需求,事实表里的时间是德国时间,需要换算成北京时间,换算的逻辑是夏时制时,北京时间与德国时间相差6个小时,北京时间12点,德国比中国晚6个小时,德国时间是凌晨6点:冬时制时,北 ...

  8. UTC时间, GMT时间 ,夏令时

    经常混淆于此,特地研究了一下,记录在此以备忘. 整个地球分为二十四时区,每个时区都有自己的本地时间.在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC, Universal ...

  9. linux ora01075,操作系统时间被修改导致ORA-01075和ORA-00600[2252]

    操作系统时间被修改引发数据库ORA-00600内部错误: ERROR1: $ sqlplus /nolog SQL*Plus: Release 11.1.0.7.0 - Production on F ...

最新文章

  1. JBoss 系列八十一: jBPM 6 中使用 jbpm-console 创建执行 BPM 流程 - II
  2. php源码编译常见错误解决方案大全
  3. MATLAB中plot()画图的颜色线型和希腊字母参数设置
  4. 检查单 2015-05-15-01
  5. 《深入理解Elasticsearch(原书第2版)》一2.3.3 把查询模板保存到文件
  6. 夺命雷公狗---PDO NO:3与连接有关的选项
  7. IE 浏览器 js new Date NAN
  8. 监控摄像头网页直播解决方案
  9. outlook邮箱邮件内容乱码_outlook邮件乱码怎么转换
  10. html圆形头像的制作
  11. 一级计算机网络应用题目操作,计算机一级考试excel操作题目
  12. 恶意软件家族分类 模型集成方案总结
  13. 【Vue.js安装】
  14. SLIC Superpixels 算法学习笔记
  15. 海康存储服务器虚拟机,unraid 安装虚拟机攻略
  16. 解决:ValueError: multi_class must be in (‘ovo‘, ‘ovr‘)
  17. TX2+TensorRT+DIGITS实现图像的识别、检测和分割---1---Jetson配置
  18. 软连接和硬连接(Linux创建软连接一定要用绝对路径)
  19. Thinkphp——hook类行为扩展
  20. PyCharm修改背景颜色

热门文章

  1. visio流程图工具安装包的下载和安装教程
  2. 斐波那契1.斐波那契数列
  3. 博客系统程序(页面设计)
  4. java虚数复数计算_真实的虚数,不仅不是没用,而且还很实在
  5. H3C S5130S 交换机配置
  6. 信号调理方法总结笔记
  7. 1833 雪糕的最大数量
  8. unittest的使用_Sinno_Song_新浪博客
  9. VB.net学习笔记(六)VB.net的对象
  10. 关于Synergy无法启动