2021110701-java前后台传递时间对象相差8个小时的时区问题
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个小时的时区问题相关推荐
- 解决java前台传递时间到后台相差8个小时的时区问题
经过查阅相关资料发现在spring转json的默认实现jackson中会根据时区去转换时间,而jackson的默认时区跟 国内应该是相差8小时,所以再时间换算上相差了8小时 解决方案一,在Model的 ...
- java 日期calendar_java时间对象Date,Calendar和LocalDate/LocalDateTime
一.简介 Date:java.util.Date包,包含日期,时间,毫秒数. Calendar:java.util.Calendar包,abstract修饰,Date的很多方法已经过时迁移到了Cale ...
- Java 各种日期/时间 对象转Long时间戳
package cn.xbz;import java.text.SimpleDateFormat; import java.time.*; import java.time.format.DateTi ...
- 3dmax图像采样器抗锯齿_内幕揭秘!同样的场景同一张图,用3DMAX网渲平台进行二次渲染时间竟然相差3个小时之多!...
一个分辨率:4000*2000的室内客餐厅,3dmax版本是2014版本,渲染器版本为vray3.63,机器:阿里云1台服务器,这个同样的场景同样的参数同一张图,用3dmax网渲平台进行二次渲染发现时 ...
- 往数据库中插入时间,与预期值相差8个小时(时区设置)
问题: 数据库中插入时间时,得到的结果比传入的时间不一致,少8个小时. 原因: 数据库连接时区设置的UTC (协调世界时间)或者GMT(格林尼治标准时间) 与中国时间不同,相差8个小时. 解决: 将数 ...
- 解决java的Date相差8个小时的时区问题
经过查阅相关资料发现在spring转json的默认实现jackson中会根据时区去转换时间,而jackson的默认时区跟 国内应该是相差8小时,所以再时间换算上相差了8小时 解决方案一,在Model的 ...
- java intent 传递集合对象_Intent之对象传递(Parcelable传递对象和对象集合)
接着上一篇文章,以下我们讨论一下怎样利用Parcelable实现Intent之间对象的传递 一.实现对象传递 首先创建User.java实现Parcelable接口: package org.yayu ...
- java intent 传递集合对象_Android系列之Intent传递对象的几种实例方法
在Android中intent传递对象主要有2种方式分别是,Bundle.putSerializable(Key,Object)和Bundle.putParcelable(Key, Object);当 ...
- Java计算当前时间提前以及推迟几小时方法
方法一:使用Calendar 类 import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date ...
- java include 传递对象_变量的值传递,地址引用(和对象成员变量、局部变量创建和初始化的内存机制)...
变量的值传递,地址引用(和对象成员变量.局部变量创建和初始化的内存机制) 变量的值传递,地址引用: 搞懂=含义,=即指向,看指向的内存块是否发生改变,还有是否是新内存块, 通过指向可以控制内存块的值. ...
最新文章
- NVIDIA TensorRT高性能深度学习推理
- C#非泛型集合类-ArrayList数组集合类
- PHP语法分析器:RE2C BISON 总结
- VC从文件中加载图片
- boost::graph_property_iter_range用法的测试程序
- 图片和图形之性能和视图层次结构(18)
- P5021-赛道修建【平衡树,贪心,二分答案】
- WAIC开发者日倒计时一天,收藏好这份完整日程
- Qt 串口通信 高速发送出错的解决方法总结
- Gartner指明2014年几大战略技术趋势
- android屏幕亮度测试,屏幕亮度与可视角度测试_手机Android频道-中关村在线
- 【空间分析】0 基本空间分析工具
- Latex 带圈数字
- 分享NetSuite CRM成功实施案例!
- 带你玩转Visual Studio——Property Manager的配制
- Python爬取京东商品评论
- 【转】ASC II 完整码表及简介
- HTTP传输协议详解(传输过程及数据格式详细)
- python练习题(基础篇2)
- 如何迎新年?手工自制2021年精美简朴行事历
热门文章
- 修复常见ACPI问题(DSDT等)
- spider_study 1
- 河北档案费2016年取消
- 手机话费充值 java实例_手机话费充值接口调用示例
- Markdown必备,Lsky-pro图床配置
- python根据模板中的MML,批量生成小区脚本
- Python NLP 自然语言处理
- excel表格公式出现#REF是什么意思
- 解决console控制台反复打印“WebSocket connection to ws://localhost:9528/sockjs-node/107/uadaszgz.websocket fai
- 两个单位方向矢量夹角的余弦值推导过程【遥感散射角余弦】