ObjectMapper 正在转换为错误的日期时间

Posted

技术标签:

【中文标题】ObjectMapper 正在转换为错误的日期时间【英文标题】:ObjectMapper is converting to wrong datetime 【发布时间】:2015-07-30 22:50:58 【问题描述】:

我将日期传递为"scoreTimestamp": "2015-04-15T10:00:00.000Z", 并希望将此 json 作为字符串保存在数据库中,因此使用方法

 ObjectMapper objMapper = new ObjectMapper();
String ratingData = objMapper.writeValueAsString(scoreTimestamp);

我希望日期为:“scoreTimestamp”:“2015-04-15 10:00”,其中 objectMapper 将其转换为:

  "scoreTimestamp" : 
"year" : 2015,
"dayOfMonth" : 15,
"dayOfWeek" : 3,
"era" : 1,
"dayOfYear" : 105,
"monthOfYear" : 4,
"weekyear" : 2015,
"yearOfEra" : 2015,
"yearOfCentury" : 15,
"weekOfWeekyear" : 16,
"centuryOfEra" : 20,
"millisOfSecond" : 0,
"millisOfDay" : 36000000,
"secondOfMinute" : 0,
"secondOfDay" : 36000,
"minuteOfHour" : 0,
"minuteOfDay" : 600,
"hourOfDay" : 10,
"zone" : 
  "fixed" : true,
  "id" : "UTC"
,

有人可以帮帮我吗?

【问题讨论】:

请看文章***.com/questions/41876037/…中提到的答案 【参考方案1】:

从Jackson v2.0开始,可以直接在字段上使用@JsonFormat注解:

@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone="GMT")
private Date scoreTimestamp;

或设为默认

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm a z");
objMapper.setDateFormat(df);

【讨论】:

它不工作..它仍然相同 "scoreTimestamp": "year": 2015, "dayOfMonth": 15, "dayOfWeek": 3, "era": 1, "dayOfYear": 105 ,“millisOfSecond”:0,“millisOfDay”:36000000,“secondOfMinute”:0,“secondOfDay”:36000,“minuteOfHour”:0,“minuteOfDay”:600,“hourOfDay”:10,“monthOfYear”:4,“ weekyear”:2015,“yearOfEra”:2015,“weekOfWeekyear”:16,“yearOfCentury”:15,......等 也不适合我。我在要序列化的对象内的Map 中有DateTime 对象。

以上是关于ObjectMapper 正在转换为错误的日期时间的主要内容,如果未能解决你的问题,请参考以下文章

ObjectMapper如果某些字段无法转换为对象的默认值

Swift:如何将带有 Alamofilre 或 SwiftyJSON 的 JSON 字符串转换为 ObjectMapper?

使用 Jackson ObjectMapper 将 Json 的一部分转换为 HashMap

Swift Object Mapper 传递不同的日期

ObjectMapper toJSON() 快速

使用 ObjectMapper 将 JSON 日期格式从 ZonedDateTime 序列化为自定义日期格式