我有一個方法,它有一個用@DateTimeFormat 注釋的引數。
public static void exampleMethod(@ApiParam(value = "date", required = true)
@DateTimeFormat(pattern = "yyyy-MM-dd") Date date) {...}
當它得到“2021-05-13”時,由于某種原因,日期變數包含“2021-05-12”。我可以使用哪些其他類似的注釋或日期資料型別來避免此錯誤?
預先感謝。
uj5u.com熱心網友回復:
時間
該java.util日期時間API及API格式,SimpleDateFormat都已經過時,而且容易出錯。建議完全停止使用它們并切換到現代 Date-Time API *。
一個java.util.Date物件只是代表時間線上的一個瞬間——一個包裝自 UNIX 時代(1970 年 1 月 1 日,格林威治標準時間 00:00:00)以來的毫秒數。由于它不包含任何時區資訊,因此在決議/格式化 using 時默認應用的是 JVM 的時區SimeplDateFormat,這可能是您的情況下問題的根本原因。
使用java.time現代日期時間 API 的解決方案:將date欄位型別更改LocalDate為如下:
public static void exampleMethod(
@ApiParam(value = "date", required = true)
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date) {...}
從Trail: Date Time 中了解有關現代日期時間 API 的更多資訊。
如果您想使用java.util.Date:
根據檔案:
每當
iso()在格式化日期值時使用該屬性時,UTC 將用作時區。
所以,你需要做的就是使用iso()屬性即
public static void exampleMethod(
@ApiParam(value = "date", required = true)
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) Date date) {...}
* 如果您正在為 Android 專案作業并且您的 Android API 級別仍然不符合 Java-8,請檢查通過 desugaring 可用的 Java 8 API。請注意,Android 8.0 Oreo 已提供對java.time.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/321369.html
