一、说明

今天遇到一个查了很久的问题,具体表现为前端传过来的时间参数的时区是+0800,我用Jackson反序列化成对象时,时间解析出来还是正确的,但是我再将对象序列化为Json数据时时区又变成了+0000时区,导致前端出现了问题,但是服务器上用命令date看时,时区也是正确的。解决后在此记录一下解决方法。

1.1 @JsonFormat

用途:表示json序列化的一种格式或者类型,常用来转换时间的格式。
用法:@JsonInclude(pattern=日期的格式,timezone=默认是GMT,东八区需要使用GMT+8.值)。
(仅说明时间格式的转换)

二、示例

2.1 操作

测试数据:

  {"time1": "2022-09-16T16:26:48+0800","time2": "2022-09-16T16:27:48+0800"}

实体类

@JsonIgnoreProperties(ignoreUnknown = true)
@Getter
@Setter
@ToString
public class Body{@JsonFormat(pattern = Serializer.DATE_FORMAT, timezone = "GMT+8")private Date time1;@JsonFormat(pattern = Serializer.DATE_FORMAT, timezone = "GMT+8")private Date time2;

封装Jackson的类

public class Serializer{public static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ssZ";private final ObjectMapper mapper = new ObjectMapper();public Serializer() {mapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);}public Date decodeTime(String str) throws SkyLinkException {if (str == null || str.isEmpty()) {return null;}SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);try {return sdf.parse(str);} catch (ParseException e) {throw new SkyLinkException(e);}}public String encodeTime(Date date) throws SkyLinkException {if (date != null) {SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);return sdf.format(date);}return null;}public <T> String encode(T obj) throws SkyLinkException {try {return mapper.writeValueAsString(obj);} catch (JsonProcessingException e) {throw new SkyLinkException(e);}}public <T> T decode(String json, Class<T> cls) throws SkyLinkException {try {return mapper.readValue(json, cls);} catch (IOException e) {throw new SkyLinkException(e);}}

说明:此处Body类的time1、time2上如果没加上timezone = “GMT+8”,那么我调用Serializer类的encode后,结果time1和time2就变成了2022-09-16T8:26:48+0000。

Jackson(二):@JsonFormat时间格式及时区问题相关推荐

  1. android获取时区时间格式,考虑时区的日期/时间转换-Android

    为了理解这个概念,考虑以下情形,首先从服务器以GMT格式(假设)获取时间戳,然后需要将其转换为某种模型,该模型将日期存储为Local格式的Date对象,然后将日期作为时间戳(字符串)以GMT格式输入到 ...

  2. mysql date 24小时制_SpringBoor连接mysql数据库取数据库中时间格式是12小时制的时间,如何显示成24小时制...

    设置spring配置文件: 1.spring.datasource.url=jdbc:mysql://10.35.105.25:3306/database?characterEncoding=utf- ...

  3. 统一返回的json时间格式

    默认情况下json时间格式带有时区,并且是世界标准时间,和我们的时间差了八个小时 在application.properties中设置 #返回json的全局时间格式 spring.jackson.da ...

  4. 时间字符串string转换为时间格式nsdate

    废话不多说直接贴代码: 一.字符串转时间格式 //字符串转换为日期// 实例化NSDateFormatterNSDateFormatter *inputFormatter= [[NSDateForma ...

  5. java 时间格式“yyyyMMddHHmmssSSSSSS”的解释

    一.背景   因近期对接第三方接口时,涉及到多种时间格式,因此记录一下时间格式中的相关含义. 二.时间格式解释 字母 日期或时间元素 表示 示例 G Era 标志符 Text AD y 年 Year ...

  6. sqlserver 时间格式函数详细

    一.时间函数 在使用存储过程,sql函数的时候,会遇到一些对时间的处理.比如时间的获取与加减.这里就用到了sql自带的时间函数.下面我列出这些函数,方便日后记忆,使用. --getdate 获取当前时 ...

  7. mysql 时间chuo格式化_Mysql时间戳与时间格式转换问题汇总

    一.时间戳的定义 时间戳指格林威治时间1970年01月01日00时00分00秒起至现在的总秒数. 二.时间格式转时间戳的方法 使用unix_timestamp函数,如下:SELECT UNIX_TIM ...

  8. mysql 在时间上加120s_sqlserver 时间格式函数详细

    一.时间函数 在使用存储过程,sql函数的时候,会遇到一些对时间的处理.比如时间的获取与加减.这里就用到了sql自带的时间函数.下面我列出这些函数,方便日后记忆,使用. --getdate 获取当前时 ...

  9. Linux时间戳和时间格式转化

    一.时间戳转化为时间格式 1.场景1:时间戳转化为当前时间格式 命令:date -d @待转化的时间戳 实例:date -d @1556519685 转化结果:Mon Apr 29 14:34:45 ...

最新文章

  1. IOS7笔记-6、控制器多态性、导航控制器、选项卡栏控制器
  2. dns网络服务的搭建和配置
  3. 粤港澳大湾区菜篮子-哲商对话·林裕豪:从玉农业谋定标准
  4. java list想加_利用java List 实现多项式相加,相乘
  5. python你的人生_人生苦短:运行你的第一个 Python 脚本
  6. Linux之JDK安装
  7. Python文件的操作2
  8. day15【前台】项目发布
  9. 量化指标公式源码_五行量化副图指标公式源码
  10. 星星之火-7:从数值空间理解模拟信号、离散信号、数字信号的区别
  11. 使用border-radius画出圆形、半圆、鸡蛋和爱心
  12. 苹果cms新手快速入门常见问题汇总及解决教程
  13. 利用requests库批量下载PDF文件
  14. dell 重装linux系统_预装Linux(Ubuntu)的DELL笔记本重装Windows
  15. iOS开发:国际化之app支持多种语言切换
  16. vgg16构造模型图(转)
  17. 织梦教程:ms在channel标签中调用typeid无效解决办法
  18. 从文艺青年到2B青年,轻博客的N种玩法
  19. HTML collection数组转换成正常的dom对象数组
  20. 二进制数的三种形式-----原反补

热门文章

  1. 修改IDEA中Java代码的默认注释风格
  2. python whl怎么安装_.whl文件在python库的安装
  3. 如何将阿里云天气接口中返回的天气图标转换成对应的url
  4. C++习题--整数对调
  5. 怎么样用python画一朵花_如何用程序绘制一朵花?
  6. 惊!一个千万级 PV 规模高性能高并发网站架构
  7. java1到4章复习
  8. Windows部署SMTP邮件服务器
  9. simulink抖动_时钟抖动的建模与仿真_上传
  10. 论医院GPS北斗授时时钟系统(NTP时钟服务器)的重要性