格式化日期注解@JsonFormat的使用和TimeZone时区问题

饭宝  论坛元老 | 2024-8-16 18:50:11 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1663|帖子 1663|积分 4989

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
@JsonFormat的使用

目标

        为了便于date范例字段的序列化和反序列化,需要在数据结构的Date、Timestamp、DateTime范例的字段上用JsonFormat注解举行注解
使用

        @JsonFormat注解是一个时间格式化注解,比如我们存储在mysql中的数据是date范例的,当我们读取出来封装在实体类中的时候,就会酿成英文时间格式,而不是yyyy-MM-dd HH:mm:ss这样的中文时间,因此我们需要用到JsonFormat注解来格式化我们的时间。一样平常用于一个字段定名上面,示例:
  1.     /**
  2.      * 生日
  3.      */
  4.     @JsonFormat(pattern = Dates.Pattern.DATE)
  5.     private Date birthday;
复制代码
这里Dates.Pattern.DATE是摆列范例取值,对应值可以自定义,例如:
  1.     /**
  2.    * yyyy-MM-dd
  3.    */
  4. String DATE = "yyyy-MM-dd";
复制代码
要想使用此注解,需要引入依靠:
  1. <dependency>
  2.     <groupId>com.fasterxml.jackson.core</groupId>
  3.     <artifactId>jackson-databind</artifactId>
  4.     <version>2.9.2</version>
  5. </dependency>
复制代码
当然,我们在spring boot框架开发中:
我们的spring-boot-starter-web启动器已经整合了jackson-databind依靠
不需要再重复引入jackson-databind依靠
 
        引入fasterxml maven jar包之后,就可以在实体类属性上面使用@JsonFormat注解了
        要注意的是,它只会在类似@ResponseBody返回json数据的时候,才会返回格式化的yyyy-MM-dd HH:mm:ss时间,你直接使用System.out.println()输出的话,仍然是类似“Fri Dec 01 21:05:20 CST 2017”这样的时间样式。
时区概述

GMT:Greenwich Mean Time 格林尼治标准时间。这是以英国格林尼治天文台观测效果得出的时间,这是英国格林尼治当地时间,这个地方的当地时间已往被当成世界标准的时间。
UT:Universal Time 世界时。根据原子钟盘算出来的时间。
UTC:Coordinated Universal Time 和谐世界时。由于地球自转越来越慢,每年都会比前一年多出零点几秒,每隔几年和谐世界时组织都会给世界时+1秒,让基于原子钟的世界时和基于天文学(人类感知)的格林尼治标准时间相差不至于太大。并将得到的时间称为UTC,这是现在使用的世界标准时间。
和谐世界时不与任何地域位置相干,也不代表此刻某地的时间,所以在阐明某地时间时要加上时区
也就是说GMT并不即是UTC,而是即是UTC+0,只是格林尼治刚好在0时区上。
GMT = UTC+0
中国的默认时区

中国的默认时区是东八区

TimeZone设置时区

timezone: 默认是GMT,中国需要GMT+8
格林尼治时间(GMT)、世界和谐时间(UTC)和中国时间的关系

中国时间(Asia/Shanghai) = 格林尼治时间(GMT) + 8
格林尼治时间(GMT) = 世界和谐时间(UTC) + 0
时区问题

我们在格式化的时候要指定时区(timezone ),以中国时区为例,代码如下:
  1. /**
  2. * 生日
  3. */
  4. @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
  5. private Date birthday;
复制代码
实例

项目中我们的日期非常的难看,而且存在时区问题
(由于我们选择的日期是2月13号,显示的却是2月12号)

 我们使用@JsonFormat后,就可以格式化我们的日期,而且办理失去问题
  1. @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
  2. private Date birthday; // 生日
复制代码
效果


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

饭宝

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表