【问题标题】:objectmapper.readvalue automatically change the timezoneobjectmapper.readvalue 自动改变时区
【发布时间】:2018-03-09 08:17:23
【问题描述】:

我从前端发送日期如下格式的字符串。

[{"开始日期":"2018-03-09"}]

在春天,我使用 ObjectMapper 在 POJO 中获取它。 使用 ObjectMapper.readValue 时正在转换为以下日期。

2018 年 3 月 9 日星期五 05:30:00 IST

下面的代码我已经试过了。

ObjectMapper objectMapper = new ObjectMapper().setTimeZone(TimeZone.getTimeZone("UTC"));

但它不适合我。 仍然得到 Fri Mar 09 05:30:00 IST 2018 作为输出。

如何使代码独立于时区。

【问题讨论】:

  • 您究竟是如何打印它以查看上面的 Fri Mar...可能是该值是正确的,但您使用的打印方法正在执行此操作。
  • 我没有格式化任何东西。我只是按原样打印日期。
  • 你好吗“只是打印日期”这就是我所说的。你能展示你的代码吗!

标签: java json spring objectmapper


【解决方案1】:

您正在将字符串日期映射到日期对象。你不能有没有时区的日期对象。 UTC 时区被映射器正确应用,日期被存储为2018-03-09 00:00:00 UTC,而 IST 则变为2018-03-09 05:30:00 IST。如果您想要2018-03-09 00:00:00 IST 时间,而不是UTC,请通过IST

如果您希望发送不带时区的日期,您可以使用如下所示的注释来实现(需要 json-jackson 版本 >= 2.0)

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone="Asia/Kolkata")
private Date date;

【讨论】:

  • 我遇到了错误。解析日期值“2018-03-09”失败(格式:“yyyy-MM-dd HH:mm a z”)
  • 然后给出 3 月 8 日的输出。我也尝试将日期发送为 2018-03-08T18:30:00.000Z。请为此提供正确的格式。
  • 用提供时区的选项编辑了答案。你现在可以检查吗?此外,请确保您没有使用具有差异配置的 2 个不同的对象映射器。 (可能是你自己的一个和 spring 创建的一个)
  • 抱歉无法上传代码。使用以下代码进行对象映射 objectMapper.readValue(inputData, TypeFactory.defaultInstance().constructCollectionType(List.class, DTO.class));我只是从前端发送日期。试图用我的 POJO 变量映射日期。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-21
  • 2019-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多