在程序开发中会因为时区的不同,会发生时间类型的数据出现问题。记录@JsonFormat 注解在使用过程中应该注意的问题。

文章目录

  • 时区概述
  • 中国的默认时区
  • TimeZone获得本地时区
  • 格林尼治时间(GMT)、世界协调时间(UTC)和中国时间的关系
  • Locale获得每个国家的语言简称
  • @JsonFormat注解用法
  • 程序中数据库时区的设置
  • 本文小结

时区概述

GMT:Greenwich Mean Time 格林尼治标准时间。这是以英国格林尼治天文台观测结果得出的时间,这是英国格林尼治当地时间,这个地方的当地时间过去被当成世界标准的时间。

UT:Universal Time 世界时。根据原子钟计算出来的时间。

UTC:Coordinated Universal Time 协调世界时。因为地球自转越来越慢,每年都会比前一年多出零点几秒,每隔几年协调世界时组织都会给世界时+1秒,让基于原子钟的世界时和基于天文学(人类感知)的格林尼治标准时间相差不至于太大。并将得到的时间称为UTC,这是现在使用的世界标准时间。

协调世界时不与任何地区位置相关,也不代表此刻某地的时间,所以在说明某地时间时要加上时区

也就是说GMT并不等于UTC,而是等于UTC+0,只是格林尼治刚好在0时区上。

GMT = UTC+0


中国的默认时区

中国的默认时区是东八区


TimeZone获得本地时区

实现代码

package cn.wideth.util;import java.util.TimeZone;public class Main {public static void main(String[] args) {//获得当前的默认时区TimeZone timeZone = TimeZone.getDefault();System.out.println(timeZone);}}

运行结果


格林尼治时间(GMT)、世界协调时间(UTC)和中国时间的关系

中国时间(Asia/Shanghai) = 格林尼治时间(GMT) + 8
格林尼治时间(GMT) = 世界协调时间(UTC) + 0

package cn.wideth.util;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;public class TimeZoneTest {public static void main(String[] args) {//中国的默认时区,东八区,默认为Asia/ShanghaiTimeZone tz = TimeZone.getDefault();System.out.println(tz.getID());SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");TimeZone timeZone = TimeZone.getTimeZone(tz.getID());simpleDateFormat.setTimeZone(timeZone);System.out.println(simpleDateFormat.format(new Date()));//东八区的时间 = 格林尼治时间 + 8TimeZone timeZone2 = TimeZone.getTimeZone("GMT+8");simpleDateFormat.setTimeZone(timeZone2);System.out.println(simpleDateFormat.format(new Date()));System.out.println("-------------------------------------");//格林尼治时间(GMT)。GMT = UTC+0TimeZone timeZone3 = TimeZone.getTimeZone("GMT");simpleDateFormat.setTimeZone(timeZone3);System.out.println(simpleDateFormat.format(new Date()));//世界协调时间(UTC),世界标准时间(美国时间)TimeZone timeZone4 = TimeZone.getTimeZone("UTC");simpleDateFormat.setTimeZone(timeZone4);System.out.println(simpleDateFormat.format(new Date()));}
}

运行结果


Locale获得每个国家的语言简称

package cn.wideth.util;import java.util.Locale;
/*** java来获得全球国家* 名称,语言和简称*/
public class LocaleTest {public static void main(String[] args) {//获得中国的简称,默认为语言简称Locale l = Locale.getDefault();Locale[] locales = Locale.getAvailableLocales();for(int i = 0, len = locales.length; i < len; i++){StringBuffer sb = new StringBuffer();sb.append("中文名称:").append(locales[i].getDisplayCountry()).append(" -- 简称:").append(locales[i].getCountry()).append(" -- 语言简称:").append(locales[i].toString());System.out.println(sb.toString());}}
}

运行结果


@JsonFormat注解用法

@JsonFormat 用来表示json序列化的一种格式或者类型,主要有下面几个常用的属性

   @JsonFormat(shape = JsonFormat.Shape.ANY,locale = "zh_CN",pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT")private  Date date;

shap: 表示序列化后的一种类型,默认为JsonFormat.Shape.ANY

pattern: 表示日期的格式,默认为序列化以后的格式,比如:2020-09-08T15:19:09.000+00:00

timezone: 默认是GMT,中国需要GMT+8

locale: 根据位置序列化的一种格式,默认为本地的语言简称,中国的语言简称为zh_CN

注意:@JsonFormat注解默认的时区为格林尼治时间,比中国时间(东八区是要小8个小时的)。


程序中数据库时区的设置


本文小结

本文首先介绍了时区,中国时区,即东八区。格林尼治时间,世界协调时间。最后介绍了@JsonFormat注解的使用和用法,以及在使用过程中需要注意到的问题。

@JsonFormat注解和时区问题相关推荐

  1. @JsonFormat注解未设置时区导致的返回时间错误

    @JsonFormat未设置时区而导致返回错误时间 有时候我们使用 @JsonFormat注解时会忽略设置时区,这样有可能就会导致我们转换的时间与我们从数据库查出的真确时间有差别 这样有可能会导致时间 ...

  2. Date入参和出参格式_@DateTimeFormat 和 @JsonFormat 注解

    1. 准备 定义一个pojo,它有一个 java.util.Date 类型的属性 date. import java.util.Date;           public class DateVo ...

  3. @DateTimeFormat@JsonFormat注解详解

    场景 @JsonFormat注解是属于Jackson的一个时间格式化注解,用于格式化时间. 可以在入参出参的时候就将时间格式化好. @DateTimeFormat注解是spring的,它可以帮助我们把 ...

  4. SpringBoot - @JsonFormat注解详解

    写在前面 @JsonFormat注解是一个时间格式化注解,用于格式化时间. 比如存储在MYSQL中的数据是dateTime类型,将数据获取以后封装到实体类中的时候,就会变成英文的时间格式(Wed Ju ...

  5. localdatetime转化为date_为啥你用@JsonFormat注解时,LocalDateTime会反序列化失败?

    写在前面 最近,有个小伙伴问我:我在SpringBoot项目中,使用@JsonFormat注解标注LocalDateTime类型的字段时,LocalDateTime反序列化失败,这个我该怎么处理呢?别 ...

  6. 为啥你用@JsonFormat注解反序列化LocalDateTime总失败?

    点击上方蓝色"冰河技术",关注并选择"设为星标" 持之以恒,贵在坚持,每天进步一点点! 作者个人研发的在高并发场景下,提供的简单.稳定.可扩展的延迟消息队列框架 ...

  7. @RequestBody配合@JsonFormat注解实现字符串自动转换成Date

    2018年08月28日 16:41:15 混合动力火锅 阅读数:440 在controller中使用@RequestBody可以自动将字符串转换成int或者将int转换成字符串,但是Date类型则不行 ...

  8. java对象转json格式化_Java对象转json JsonFormat注解

    写在前面,首先,我用的java转json序列化的工具是java开源的jackson. 今天在做后端接口的时候,发现获取的json对象中少了几个属性,因为其他的接口都能得到正确的json,所以很快就找到 ...

  9. jsonformat注解失效

    jsonformat注解失效原因有许多 我失效的原因是mapper中的对应没写对 如: <!-- 根据条件查询歌手信息 --><select id="getSinger&q ...

最新文章

  1. 【超简单】MySQL存储引擎的选择与配置
  2. RESTful API 中的 Status code 是否要遵守规范
  3. Debian9.1下安装后没有ifconfig命令
  4. 见识决定眼界,关注这些让你变得博学且有趣
  5. 无论是工作还是生活都要记住这些话
  6. CTF-汇编语言归纳
  7. 网站制作---网站伪静态的介绍
  8. C++多线程编程 (1)
  9. Halcon 基本算子释义
  10. libSVM + VS2013 + C++使用介绍
  11. vim中自动格式化代码
  12. Predictably Irractional - 期望的效应
  13. Windows操作系统发展简史
  14. 混合开发Ionic+angular快速开发App
  15. PS通道抠图及选区白边处理
  16. UEFI开发探索50 – UEFI与网络2
  17. 开关电源电路图讲解。多图!!!
  18. FPGA图像处理的仿真测试激励该如何写?
  19. Kibana:Kibana 入门 (二)
  20. Systemverilog中时间单位以及相关系统函数

热门文章

  1. 使用iTunes恢复固件发生未知错误1013简析
  2. 关于DHCP服务器的offer与ack阶段是单播还是广播的研究【转】
  3. MySQL存储引擎介绍及区别
  4. 新兴国家战略级安全话题-软件供应链安全
  5. java二维数组及遍历
  6. 学计算机二级ms office,计算机二级MsOffice
  7. 王者凋零 数字货币滑向深渊
  8. php 链接转跳,PHP网站跳转链接代码
  9. 第六章:小学生不一定会的运算,痴月熊学python
  10. Ubuntu真机下MTK平台FAE自助脚本调试工具,无需驱动工程师协助(shell源码开源)