json Date格式化时间偏差8小时,而@JsonFormat注解有无法动态指定时区,如何解决?

news/2024/9/24 7:14:03/

use this method to set timezone and replace @JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”, timezone=“GMT+8”)

(1)Model field

    @JSONField(format = DateTimeJsonFormatSerializer.TIME_FMT)//fastjson,JSON.toJSONString()@JsonSerialize(using = DateTimeJsonFormatSerializer.class)//jackson,影响http request@JsonDeserialize(using = DateTimeJsonFormatDeserializer.class)//jackson,影响http responseprivate Date deliverTime;

(2) DateTimeJsonFormatSerializer.java


import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import lombok.extern.slf4j.Slf4j;import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;@Slf4j
public class DateTimeJsonFormatSerializer extends JsonSerializer<Date> {public static final String TIME_FMT="yyyy-MM-dd HH:mm:ss";protected static ThreadLocal<SimpleDateFormat> THREAD_LOCAL = new ThreadLocal<SimpleDateFormat>() {@Overrideprotected SimpleDateFormat initialValue() {SimpleDateFormat simpleDateFormat = new SimpleDateFormat(TIME_FMT);TimeZone timeZone = TimeZone.getDefault();//        TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");simpleDateFormat.setTimeZone(timeZone);return simpleDateFormat;}};public DateTimeJsonFormatSerializer() {log.info("DateTimeJsonFormatSerializer default timezone:" + TimeZone.getDefault().getID());}@Overridepublic void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {jsonGenerator.writeString(THREAD_LOCAL.get().format(date));}
}

(3)DateTimeJsonFormatDeserializer.java

import com.fasterxml.jackson.core.JacksonException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import lombok.extern.slf4j.Slf4j;import java.io.IOException;
import java.text.ParseException;
import java.util.Date;
import java.util.TimeZone;@Slf4j
public class DateTimeJsonFormatDeserializer extends JsonDeserializer<Date> {public DateTimeJsonFormatDeserializer() {log.info("DateTimeJsonFormatDeserializer default timezone:" + TimeZone.getDefault().getID());}@Overridepublic Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JacksonException {try {return DateTimeJsonFormatSerializer.THREAD_LOCAL.get().parse(p.getText());} catch (ParseException e) {throw new RuntimeException(e);}}
}
参考:
https://www.iditect.com/program-example/java--set-current-timezone-to-jsonformat-timezone-value.html
https://cloud.tencent.com/developer/article/2063631

http://www.ppmy.cn/news/1529707.html

相关文章

如何从格式化的笔记本电脑或台式机中恢复照片

您想学习如何从已格式化的笔记本电脑或台式机中恢复已删除的照片吗&#xff1f;这篇文章解释了如何使用最佳格式的照片恢复软件来做到这一点。您可以通过简单的步骤格式化计算机后恢复已删除的图像。 将照片保存在笔记本电脑或 PC 硬盘上是很常见的。与相机存储卡和 USB 闪存驱…

排序----希尔排序

void ShellSort(int* a, int n) {int gap n;while (gap > 1){// 1保证最后一个gap一定是1// gap > 1时是预排序// gap 1时是插入排序gap gap / 3 1;for (size_t i 0; i < n - gap; i){int end i;int tmp a[end gap];while (end > 0){if (tmp < a[end]){…

企业EMS -能源管理系统-能源管理系统源码-能源在线监测平台

能源管理系统是以帮助工业生产企业在扩大生产的同时&#xff0c;合理计划和利用能源&#xff0c;降低单位产品能源消耗&#xff0c;提高经济效益&#xff0c;降低CO2排放量为目的信息化管控系统。 我国能源管理从上世纪80年代中期开始&#xff0c;通过“能量平衡测试”、“能源…

HDL coder使用手册

&#x1f4a1; 由于本科毕设女朋友准备使用FPGA完成&#xff0c;因此写这篇文章帮助她快速上手HDL coder的使用&#xff0c;降低前期入门的难度。 支持生成HDL代码的simulink库 名字中含有HDL的库中的模块一般都可以用来生成HDL代码。直接搜索模块名称&#xff0c;比如搜索fir&…

662. 二叉树最大宽度 BFS 力扣

662. 二叉树最大宽度 已解答 中等 相关标签 相关企业 给你一棵二叉树的根节点 root &#xff0c;返回树的 最大宽度 。 树的 最大宽度 是所有层中最大的 宽度 。 每一层的 宽度 被定义为该层最左和最右的非空节点&#xff08;即&#xff0c;两个端点&#xff09;之间的长…

vue入门小练习

文章目录 1.案例需求2.编程思路3.案例源码4.小结 1.案例需求 一个简易的计算器&#xff0c;其效果如下&#xff1a; 图片切换&#xff0c;其效果如下&#xff1a; 简易记事本&#xff0c;其效果如下&#xff1a; 2.编程思路 1.这个Vue.js应用实现了一个简单的计算器&#x…

黑马智数Day3

渲染基础Table列表 封装接口&#xff1a; export function getCardListAPI(params) {return request({url: /parking/card/list,params}) } 具体实现&#xff1a; import { getCardListAPI } from /apis/cardexport default {data() {return {// 请求参数params: {page: 1,pa…

委托的注册及注销+观察者模式

事件 委托变量如果公开出去&#xff0c;很不安全&#xff0c;外部可以随意调用 所以取消public,封闭它&#xff0c;我们可以自己书写两个方法&#xff0c;供外部注册与注销&#xff0c;委托调用在子方法里调用&#xff0c;这样封装委托变量可以使它更安全&#xff0c;这个就叫…