当前位置: 首页 > article >正文

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

@JsonFormat的使用

目的

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

使用

        @JsonFormat注解是一个时间格式化注解,比如我们存储在mysql中的数据是date类型的,当我们读取出来封装在实体类中的时候,就会变成英文时间格式,而不是yyyy-MM-dd HH:mm:ss这样的中文时间,因此我们需要用到JsonFormat注解来格式化我们的时间。一般用于一个字段命名上面,示例:

    /**
     * 生日
     */
    @JsonFormat(pattern = Dates.Pattern.DATE)
    private Date birthday;

这里Dates.Pattern.DATE是枚举类型取值,对应值可以自定义,例如:

    /**
   * yyyy-MM-dd
   */
String DATE = "yyyy-MM-dd";

要想使用此注解,需要引入依赖:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.2</version>
</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 ),以中国时区为例,代码如下:

/**
* 生日
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date birthday; 

实例

项目中我们的日期非常的难看,而且存在时区问题

(因为我们选择的日期是2月13号,显示的却是2月12号)

 我们使用@JsonFormat后,就可以格式化我们的日期,并且解决失去问题

@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date birthday; // 生日

结果


http://www.kler.cn/a/228958.html

相关文章:

  • 市场复盘总结 20240205
  • redis stream结合springboot构造简单消息队列
  • Ubuntu 22.04 上安装和使用 Go
  • java数组学习
  • 如何避免缓存雪崩发生?
  • 进程和线程的区别详解
  • [office] excel中weekday函数的使用方法 #学习方法#微信#媒体
  • C语言递归与迭代并举:双重视角下的C语言阶乘计算实现
  • Go指针探秘:深入理解内存与安全性
  • PHP漏洞查询
  • V2X,启动高增长引擎
  • FCIS 2023:洞悉网络安全新态势,引领创新防护未来
  • undefined symbol: avio_protocol_get_class, version LIBAVFORMAT_58
  • 红队渗透靶机:LEMONSQUEEZY: 1
  • Spring IOC 之深入分析 Aware 接口
  • 链接的地址怎么做二维码?网页快速生成二维码的做法
  • springboot(ssm船舶监造系统 船只生产管理系统Java系统
  • 谷歌产品大更新:Bard可生成图像;文生音乐平台等5大免费功能
  • 编程笔记 html5cssjs 072 JavaScript BigInt数据类型
  • TreeSet 集合