我有一個類有一個日期字段表示一個數據的「有效」日期。它的定義是這樣的:JPA TemporalType.Date給出錯誤的日期
@Temporal(TemporalType.DATE)
private Date validFrom;
一切似乎被罰款工作的權利了,我拉從數據庫中的日期和顯示的地步。如果我在前端選擇日期爲2003年9月18日的日期,那麼當我檢查數據庫的時候(即數據庫是MySQL 5.5.9列類型是DATE),保存它就足夠了。然而,當我拉起一份清單時,記錄的日期是2003年9月17日 - 前一天。
如果我在2003年3月26日或2003年12月25日選擇日期的早晚,一切都很好,所以我猜這是與夏令時有關,但錯誤在哪裏蔓延?由於數據庫似乎保持正確的日期,我猜它必須是當JPA轉換回java.util.Date - 是java.util.Date最適合日期的類嗎?我已經看到了幾個人們使用Calendar的例子,但是這個例子看起來非常重,我不確定它能夠在基於JSF的前端工作。
'Date'解析爲什麼?我希望'java.util.Date'(正確的一個)而不是'java.sql.Date'?簡單的原因是,在編寫實體時,JPA試圖將實體屬性映射到數據庫列(和類型),而'java.sql.Date'已經是映射類型。所以你必須使用'java.util.Date'。另請注意,例如'p:calendar'(PrimeFaces)需要'java.util.Date'而不是'java.util.Calendar'(我自己碰到它)。請參閱:https://javabydeveloper.com/temporal/ – Roland 2017-10-25 09:03:46