我有一個像這樣的 POST API:
@JsonDeserialize(using = MyCustomDeserializer.class)
@JsonSerialize(using = MyCustomSerializer.class)
@NotNull(message = "fromDate should not be blank!")
@FutureOrPresent(message = "fromDate must be of Future or Present")
private Instant fromDate;
我的實用程式包中有這樣的自定義序列化器和反序列化器:
public class MyCustomSerializer extends JsonSerializer<Instant> {
private DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd").withZone(ZoneOffset.UTC);
@Override
public void serialize(Instant value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException {
String str = fmt.format(value);
gen.writeString(str);
}
}
public class MyCustomDeserializer extends JsonDeserializer<Instant> {
private DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd").withZone(ZoneOffset.UTC);
@Override
public Instant deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
LocalDate date = LocalDate.parse(p.getText());
return Instant.from(fmt.parse(date.toString()));
}
}
我想在內部保存時間組件作為一天的開始。API 應該只接受和輸出date
我試圖將這個來Instant。有人可以幫助我如何做到這一點(在資料庫中存盤為 date start_of_day)并作為 yyyy-MM-dd 公開/消費?
uj5u.com熱心網友回復:
特爾;博士:
return date.atStartOfDay(ZoneOffset.UTC).toInstant();
(未測驗,如有錯別請見諒。)
你真的想把一個方形的釘子裝進一個圓形的整體。AnInstant是一個時間點,在那個時間點是不同時區的兩個或三個不同的日期。解決 UTC 有幫助,然后我們可以讓它作業。它仍然不理想。差異的標準解決方案 (hack) 是將日期表示為某個時區中一天的開始,UTC 是一個很好的選擇。
為什么您的代碼不起作用:在反序列化器中決議日期(格式化后)會給出日期和 UTC 偏移量,但沒有一天中的時間。我們需要這三者來確定一個明確的時間點。相反,在我的代碼中,我明確指定了一天的開始。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/321377.html
下一篇:如何將日期/時間物件轉換為小數?
