如何使用 Jackson 反序列化 JS 日期?
我从 ExtJS 获取格式为以下的日期字符串:
“2011-04-08T09:00:00”
当我尝试反序列化此日期时,它将时区更改为印度标准时间(在时间上添加+5:30)。这就是我反序列化日期的方式:
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
getObjectMapper().getDeserializationConfig().setDateFormat(dateFormat);
这样做也不会改变时区。我仍然在 IST 中获取日期:
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
getObjectMapper().getDeserializationConfig().setDateFormat(dateFormat);
如何以日期的方式反序列化日期,而不需要时区的麻烦?
I'm getting a date string from ExtJS in the format:
"2011-04-08T09:00:00"
when i try to deserialize this date, it changes the timezone to Indian Standard Time (adds +5:30 to the time) . This is how i'm deserializing the date:
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
getObjectMapper().getDeserializationConfig().setDateFormat(dateFormat);
Doing this also doesn't change the timezone. I still get the date in IST:
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
getObjectMapper().getDeserializationConfig().setDateFormat(dateFormat);
How do I deserialize the date in the way in which it is coming without the hassles of Timezone?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
我找到了解决方法,但是这样我就需要在整个项目中注释每个日期的设置器。有没有一种方法可以在创建 ObjectMapper 时指定格式?
这就是我所做的:
并用以下注释每个日期字段的 setter 方法:
I found a work around but with this I'll need to annotate each date's setter throughout the project. Is there a way in which I can specify the format while creating the ObjectMapper?
Here's what I did:
And annotated each Date field's setter method with this:
这对我有用 - 我正在使用 jackson 2.0.4
This works for me - i am using jackson 2.0.4
有一个关于这个主题的很好的博客:
http://www.baeldung.com/jackson-serialize-dates
使用@JsonFormat看起来是最简单的方法。
There is a good blog about this topic:
http://www.baeldung.com/jackson-serialize-dates
Use @JsonFormat looks the most simple way.
除了 Varun Achar 的回答之外,这是我提出的 Java 8 变体,它使用 java.time.LocalDate 和ZonedDateTime 而不是旧的 java.util.Date 类。
In addition to Varun Achar's answer, this is the Java 8 variant I came up with, that uses java.time.LocalDate and ZonedDateTime instead of the old java.util.Date classes.
@JsonFormat 仅适用于您正在使用的 jackson 版本支持的标准格式。
例如:- 与任何标准形式兼容(“yyyy-MM-dd'T'HH:mm:ss.SSSZ”、“yyyy-MM-dd'T'HH:mm:ss.SSS'Z'”、“ EEE、dd MMM yyyy HH:mm:ss zzz"、"yyyy-MM-dd")) 适用于杰克逊 2.8.6
@JsonFormat only work for standard format supported by the jackson version that you are using.
Ex :- compatible with any of standard forms ("yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "EEE, dd MMM yyyy HH:mm:ss zzz", "yyyy-MM-dd")) for jackson 2.8.6