下面是我的 json 物件串列:
[
{
"Date": "2022-04-06T00:00:00"
},
{
"Date": "2022-12-06T00:00:00"
}
]
和我的 POJO:
@Data
public class MyPojo {
@JsonProperty("Date")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private Date date;
}
反序列化代碼:
public <T> List<T> toObjList(String json, Class<T> className) {
try {
return new ObjectMapper().readValue(json, objectMapper.getTypeFactory().constructCollectionType(List.class, className));
} catch (Exception ex) {
log.error("Exception converting json to Object: {}", json);
throw new AppException("Exception while converting String to Object list", ex, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
我的問題是,盡管省略了jsonFormat模式中的時間,但我看到每個日期都添加了一些隨機時間。我列印了序列化日期,以下是輸出:
(日期=2022 年 9 月 30 日星期五 05:30:00 IST)
我嘗試用 simleDateFormat 決議日期,它似乎決議了不包括時間。
String input = "2022-09-30T00:00:00";
SimpleDateFormat parser = new SimpleDateFormat("yyyy-MM-dd");
Date date = parser.parse(input);
System.out.println(date);
這給出了預期的輸出
2022 年 9 月 30 日星期五 00:00:00 IST
uj5u.com熱心網友回復:
避免遺留的日期時間類
可怕的java.util.Date類在幾年前被JSR 310 中定義的現代java.time類所取代。
在該類的許多缺陷中,這個名稱Date是用詞不當。該類表示一個時刻,與 UTC 的偏移量為 0 小時-分鐘-秒。所以它總是有一個時間,加上零的偏移量。
java.time.LocalDate
如果要表示僅日期值、沒有時間、沒有偏移量或時區,請使用現代類java.time.LocalDate。
從一瞬間確定日期
當遞給一個java.util.Date物件時,立即轉換為它的現代替代品,java.time.Instant. 使用添加到舊類的新轉換方法。
Instant instant = myJavaUtilDate.toInstant() ;
要確定日期,您必須指定時區。對于任何給定的時刻,日期在全球范圍內因時區而異。中的“明天”Asia/Tokyo同時是中的“昨天” America/Edmonton。
ZoneId z = ZoneId.of( "Africa/Tunis" ) ; // Specify your time zone of interest.
ZonedDateTime zdt = instant.atZone( z ) ;
提取所需的僅日期值。
LocalDate ld = zdt.toLocalDate() ;
使用、和方法比較LocalDate物件。isEqualisBeforeisAfter
搜索以了解更多資訊。所有這些都在 Stack Overflow 上多次介紹過。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/513107.html
下一篇:從自定義物件串列中洗掉重復元素
