我想一個JSON目前在文件中,轉換成使用ObjectMapper的Java對象。不同的輸出使用ObjectMapper「setDateFormat」和自定義日期解串器使用@JsonDeserialize
JSON文件:採樣日期str.json
{
"eventDate"="2017-06-27 10:04:26.573503+05:30"
}
爪哇POJO:SampleDatePOJO
class SampleDatePOJO{
private Date eventDate;
getter and setter....
toString...
}
爲JSON轉換爲Java對象
Java代碼:
ObjectMapper mapper = new ObjectMapper();
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSSX")); //this will convert Date to IST format which is okay.
SampleDatePOJO sampleDatePOJO = mapper.readValue(new File("sample-date-str.json"), SampleDatePOJO.class);
System.out.println(sampleDatePOJO.getEventDate()); //this gives output "Tue
Jun 27 10:43:59 IST 2017"
注意:如果我刪除mapper.setDateFormat(..)並使用@JsonFormat(pattern = 「yyyy-MM-dd HH:mm:ss.SSSSSSX」,timezone =「IST」)在'eventDate'字段給出相同的輸出。
Java代碼定製Deserilaizer
public class CustomDateDeserializer extends JsonDeserializer<Date>{
@Override
public Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSSXXX");
Date dateTmp = null;
try {
dateTmp = sdf.parse(p.getValueAsString());
} catch (ParseException e) {
e.printStackTrace();
}
return dateTmp;
}
}
如果我使用上面的 'EVENTDATE' 字段@JsonDeserialize註解註釋爲:
@JsonDeserialize(using=CustomDateDeserializer.class)
收到輸出:
System.out.println(sampleDatePOJO.getEventDate()); //"Tue Jun 27 10:13:59 IST 2017"
這是毫秒「573503」部分添加到日期是正確的。
我需要了解爲什麼我的ObjectMapper setDateFormat和@JsonFormat是行不通的。或者如果他們工作的很好,爲什麼在輸出格式上有相同的SimpeDateFormat格式。 任何幫助,不勝感激。
但是爲什麼你想把573503看作毫秒?他們不是打算從另一端的微秒(百萬分之幾秒)嗎?相關:[java.text.ParseException:不可解析日期:YYYY-MM-DD HH:MM:SS.SSSSSS](https://stackoverflow.com/questions/8607809/java-text-parseexception-unparseable-date-yyyy- MM-DD-HHMMSS-SSSSSS)。 –
看看['SimpleDateFormat'的Javadoc](https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html#iso8601timezone):**如果該圖案是 「X」並且時區爲「GMT + 05:30」,則生成「+05」**。只有一個'X',偏移量中的30分鐘被忽略,'SimpleDateFormat'將所有東西混淆。還有,@ OleV.V。在上面的評論中說,你確定你真的想把573503看作毫秒並將其添加到日期嗎?這聽起來不是更正確的方法,因爲小數點後面的所有內容都應該被認爲是秒的小數部分。 – 2017-08-28 12:14:09