1、问题:从postgresql获取时间,展示在前台时间不一致,相差8小时。

原因是什么么?

SpringMVC内置的JSON解析器是jackson解析器,JOSN解析器有jackson、fastsjon、jsonlib、gojson。jsackson转换的时候时区和国内默认相差8h,因此在时间换算上相差8小时。

2、什么是时区?

时区(Time Zone)是地球上的区域使用同一个时间定义。1884年在华盛顿召开国际经度会议时,为了克服时间上的混乱,规定将全球划分为24个时区。

Date:

TimeZone对象给我们的是原始的偏移量,也就是与GMT相差的微秒数,Java的Date对象里面存储着当前时刻到1970年1月1日0:00所经过的毫秒数,它与时区和地域没有关系(其实可以认为是GMT时间)计算机内部记录的时间(Date date = new Date()), 为格林威治标准时(GMT). 即java.util.Date代表一个时间点,其值为距公元1970年1月1日 00:00:00的毫秒数,所以它可以认为是没有时区和Locale概念的。

DateFormatter:

日期格式化类DateFormat, 对于不同地区的配置一般有两个点, 一个是Locale , 一个是TimeZone

前者(Locale)使DateFormat按所配置的地区特性来输出文字(例如中国,美国,法国不同地区对日期的表示格式不一样,中国可能是2001年10月5日)后者(TimeZone)让DateFormat知道怎么去转换,去调整时间偏移度,从而得到符合配置的时区的时间.假设当前时区为GMT+0,取得当前时间为2:00, 那么如果你配置DateFormat.setTimeZome("GMT+8"), 即北京时间的时区, 那么这时候格式化输出的就是10:00了, 因为系统对原始毫秒数进行了时间偏移调整(调到你设置的时区),即加多8小时,之后再格式化输出日期的字符串形式

时区 中文名称
Pacific/Majuro 马朱罗
Pacific/Midway 中途岛
Pacific/Honolulu 檀香山
America/Anchorage 安克雷奇
America/Los_Angeles 美国太平洋时间 (洛杉矶)
America/Tijuana 美国太平洋时间 (提华纳)
America/Phoenix 美国山区时间 (凤凰城)
America/Chihuahua 奇瓦瓦
America/Denver 美国山区时间 (丹佛)
America/Costa_Rica 美国中部时间 (哥斯达黎加)
America/Chicago 美国中部时间 (芝加哥)
America/Mexico_City 美国中部时间 (墨西哥城)
America/Regina 美国中部时间 (里贾纳)
America/Bogota 哥伦比亚时间 (波哥大)
America/New_York 美国东部时间 (纽约)
America/Caracas 委内瑞拉时间 (加拉加斯)
America/Barbados 大西洋时间 (巴巴多斯)
America/Manaus 亚马逊标准时间 (马瑙斯)
America/Santiago 圣地亚哥
America/St_Johns 纽芬兰时间 (圣约翰)
America/Sao_Paulo 圣保罗
America/Argentina/Buenos_Aires 布宜诺斯艾利斯
America/Godthab 戈特霍布
America/Montevideo 乌拉圭时间 (蒙得维的亚)
Atlantic/South_Georgia 南乔治亚
Atlantic/Azores 亚述尔群岛
Atlantic/Cape_Verde 佛得角
Africa/Casablanca 卡萨布兰卡
Europe/London 格林尼治标准时间 (伦敦)
Europe/Amsterdam 中欧标准时间 (阿姆斯特丹)
Europe/Belgrade 中欧标准时间 (贝尔格莱德)
Europe/Brussels 中欧标准时间 (布鲁塞尔)
Europe/Sarajevo 中欧标准时间 (萨拉热窝)
Africa/Windhoek 温得和克
Africa/Brazzaville 西部非洲标准时间 (布拉扎维)
Asia/Amman 东欧标准时间 (安曼)
Europe/Athens 东欧标准时间 (雅典)
Asia/Beirut 东欧标准时间 (贝鲁特)
Africa/Cairo 东欧标准时间 (开罗)
Europe/Helsinki 东欧标准时间 (赫尔辛基)
Asia/Jerusalem 以色列时间 (耶路撒冷)
Europe/Minsk 明斯克
Africa/Harare 中部非洲标准时间 (哈拉雷)
Asia/Baghdad 巴格达
Europe/Moscow 莫斯科
Asia/Kuwait 科威特
Africa/Nairobi 东部非洲标准时间 (内罗毕)
Asia/Tehran 伊朗标准时间 (德黑兰)
Asia/Baku 巴库
Asia/Tbilisi 第比利斯
Asia/Yerevan 埃里温
Asia/Dubai 迪拜
Asia/Kabul 阿富汗时间 (喀布尔)
Asia/Karachi 卡拉奇
Asia/Oral 乌拉尔
Asia/Yekaterinburg 叶卡捷林堡
Asia/Calcutta 加尔各答
Asia/Colombo 科伦坡
Asia/Katmandu 尼泊尔时间 (加德满都)
Asia/Almaty 阿拉木图
Asia/Rangoon 缅甸时间 (仰光)
Asia/Krasnoyarsk 克拉斯诺亚尔斯克
Asia/Bangkok 曼谷
Asia/Shanghai 中国标准时间 (北京)
Asia/Hong_Kong 香港时间 (香港)
Asia/Irkutsk 伊尔库茨克时间 (伊尔库茨克)
Asia/Kuala_Lumpur 吉隆坡
Australia/Perth 佩思
Asia/Taipei 台北时间 (台北)
Asia/Seoul 首尔
Asia/Tokyo 日本时间 (东京)
Asia/Yakutsk 雅库茨克时间 (雅库茨克)
Australia/Adelaide 阿德莱德
Australia/Darwin 达尔文
Australia/Brisbane 布里斯班
Australia/Hobart 霍巴特
Australia/Sydney 悉尼
Asia/Vladivostok 海参崴时间 (符拉迪沃斯托克)
Pacific/Guam 关岛
Asia/Magadan 马加丹时间 (马加丹)
Pacific/Auckland 奥克兰
Pacific/Fiji 斐济
Pacific/Tongatapu 东加塔布

为什么中国标准时间 (北京)是Asia/Shanghai,而不是 Asia/BeiJing 时区?

因为1949年以前,中国一共分了5个时区,以哈尔滨、上海、重庆、乌鲁木齐和喀什为代表——分别是:长白时区GMT+8:30、中原标准时区 GMT+8、陇蜀时区GMT+7、新藏时区GMT+6和昆仑时区GMT+5:30。它是1912年北京观象台制订,后由内政部批准过。

3、解决办法

A.在Model时间字段上加注解

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

@JsonFormat用于输出的时候解析,并且设置解析时区,解决8小时时间差问题
@DateTimeFormat用于接收 前端传的时间值自动转换 可以是Date 可以是string 注意 格式要一样 如yyyy-MM-dd HH:mm:ss

B.在配置文件中进行配置.yml或者.properties配置文件

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8

date-format指定date输出格式为yyyy-MM-dd HH:mm:ss
time-zone指定时区,解决8小时的时间差问题

2021110701-java前后台传递时间对象相差8个小时的时区问题相关推荐

  1. 解决java前台传递时间到后台相差8个小时的时区问题

    经过查阅相关资料发现在spring转json的默认实现jackson中会根据时区去转换时间,而jackson的默认时区跟 国内应该是相差8小时,所以再时间换算上相差了8小时 解决方案一,在Model的 ...

  2. java 日期calendar_java时间对象Date,Calendar和LocalDate/LocalDateTime

    一.简介 Date:java.util.Date包,包含日期,时间,毫秒数. Calendar:java.util.Calendar包,abstract修饰,Date的很多方法已经过时迁移到了Cale ...

  3. Java 各种日期/时间 对象转Long时间戳

    package cn.xbz;import java.text.SimpleDateFormat; import java.time.*; import java.time.format.DateTi ...

  4. 3dmax图像采样器抗锯齿_内幕揭秘!同样的场景同一张图,用3DMAX网渲平台进行二次渲染时间竟然相差3个小时之多!...

    一个分辨率:4000*2000的室内客餐厅,3dmax版本是2014版本,渲染器版本为vray3.63,机器:阿里云1台服务器,这个同样的场景同样的参数同一张图,用3dmax网渲平台进行二次渲染发现时 ...

  5. 往数据库中插入时间,与预期值相差8个小时(时区设置)

    问题: 数据库中插入时间时,得到的结果比传入的时间不一致,少8个小时. 原因: 数据库连接时区设置的UTC (协调世界时间)或者GMT(格林尼治标准时间) 与中国时间不同,相差8个小时. 解决: 将数 ...

  6. 解决java的Date相差8个小时的时区问题

    经过查阅相关资料发现在spring转json的默认实现jackson中会根据时区去转换时间,而jackson的默认时区跟 国内应该是相差8小时,所以再时间换算上相差了8小时 解决方案一,在Model的 ...

  7. java intent 传递集合对象_Intent之对象传递(Parcelable传递对象和对象集合)

    接着上一篇文章,以下我们讨论一下怎样利用Parcelable实现Intent之间对象的传递 一.实现对象传递 首先创建User.java实现Parcelable接口: package org.yayu ...

  8. java intent 传递集合对象_Android系列之Intent传递对象的几种实例方法

    在Android中intent传递对象主要有2种方式分别是,Bundle.putSerializable(Key,Object)和Bundle.putParcelable(Key, Object);当 ...

  9. Java计算当前时间提前以及推迟几小时方法

    方法一:使用Calendar 类 import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date ...

  10. java include 传递对象_变量的值传递,地址引用(和对象成员变量、局部变量创建和初始化的内存机制)...

    变量的值传递,地址引用(和对象成员变量.局部变量创建和初始化的内存机制) 变量的值传递,地址引用: 搞懂=含义,=即指向,看指向的内存块是否发生改变,还有是否是新内存块, 通过指向可以控制内存块的值. ...

最新文章

  1. NVIDIA TensorRT高性能深度学习推理
  2. C#非泛型集合类-ArrayList数组集合类
  3. PHP语法分析器:RE2C BISON 总结
  4. VC从文件中加载图片
  5. boost::graph_property_iter_range用法的测试程序
  6. 图片和图形之性能和视图层次结构(18)
  7. P5021-赛道修建【平衡树,贪心,二分答案】
  8. WAIC开发者日倒计时一天,收藏好这份完整日程
  9. Qt 串口通信 高速发送出错的解决方法总结
  10. Gartner指明2014年几大战略技术趋势
  11. android屏幕亮度测试,屏幕亮度与可视角度测试_手机Android频道-中关村在线
  12. 【空间分析】0 基本空间分析工具
  13. Latex 带圈数字
  14. 分享NetSuite CRM成功实施案例!
  15. 带你玩转Visual Studio——Property Manager的配制
  16. Python爬取京东商品评论
  17. 【转】ASC II 完整码表及简介
  18. HTTP传输协议详解(传输过程及数据格式详细)
  19. python练习题(基础篇2)
  20. 如何迎新年?手工自制2021年精美简朴行事历

热门文章

  1. 修复常见ACPI问题(DSDT等)
  2. spider_study 1
  3. 河北档案费2016年取消
  4. 手机话费充值 java实例_手机话费充值接口调用示例
  5. Markdown必备,Lsky-pro图床配置
  6. python根据模板中的MML,批量生成小区脚本
  7. Python NLP 自然语言处理
  8. excel表格公式出现#REF是什么意思
  9. 解决console控制台反复打印“WebSocket connection to ws://localhost:9528/sockjs-node/107/uadaszgz.websocket fai
  10. 两个单位方向矢量夹角的余弦值推导过程【遥感散射角余弦】