难以解决:Set Current TimeZone to @JsonFormat timezone value

ImagineDranges 2020-06-12 11:14:58
各位大佬:

时间使用jackson的@JsonFormat进行格式化:
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date beginTime;

由于GMT+8这种常量不利于国际化。

我的方法:
1 使用默认时区
@JsonFormat(shape = JsonFormat.Shape.STRING,pattern = "HH:mm",timezone = JsonFormat.DEFAULT_TIMEZONE)
private Date timeQuantumBegin;

2 配置objectMapper
@Autowired
public void configureJackson(ObjectMapper objectMapper) {
objectMapper.setTimeZone(TimeZone.getDefault());
}

但是效果还是达不到,差了八个小时。请问怎么指定timezone为系统时区?

...全文
403 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰思雨 2020-06-23
  • 打赏
  • 举报
回复
哦。我看了一下,如果不指定 JsonFormat ,应该是一个 UTC 的长整数,不是字符串,但是,这个长整数,是支持国际化的。这个长整数的值,转成字符串的话,就是(2018-01-22T09:12:43.083Z)这个形式的。
冰思雨 2020-06-23
  • 打赏
  • 举报
回复
有意思,楼主干嘛要干预 Json 的转换过程呢? 你看一下,如果你不添加JsonFormat,转换的结果是个啥。里面应该是带有时区的时间字符串,也就是说,默认支持国际化的。 你在看看你添加格式转换之后的结果是个啥。只是一个东八区的时间,关键是,转换后的字符串里面,没有东八区这个信息。 你要是想做国际化,那么,可以使用 UTC时间格式(2018-01-22T09:12:43.083Z)这个时间,和北京时间差了八小时,不过,没啥关系,系统会根据Locale TimeZone 自动转换回来的。
karlpan01 2020-06-23
  • 打赏
  • 举报
回复
@Configuration public class JacksonObjectMapperConfig { @Bean public ObjectMapper createObjectMapper() { ObjectMapper objectMapper = new Log4jJsonObjectMapper(); //更改ObjectMapper的时区GMT->default:shanghai objectMapper.setTimeZone(TimeZone.getDefault()); } }
tianfang 2020-06-16
  • 打赏
  • 举报
回复
你和系统时区比较过吗?系统时区的设置是什么?可能已经和系统时区同步了
ImagineDranges 2020-06-16
  • 打赏
  • 举报
回复
哪位大佬有办法吗?

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧