TL;博士
java.sql.Date.valueOf(
LocalDate.parse("12-Jan-23" , DateTimeFormatter.ofPattern("dd-MMM-uuuu" , Locale.US))
)
時區
你的代碼忽略時區的關鍵問題。確定一個日期需要一個時區。對於任何特定的時刻,日期因地區而異。
您的代碼使用始終使用UTC的Date
。因此,從錯誤名稱Date
級別生成的日期值對於UTC準確,但對於其他時區(例如America/Montreal
或Asia/Kolkata
)無效。
使用java.time
現代的方式做到這一點的工作是與取代的麻煩舊的遺留日期時間類java.time類。
LocalDate
類代表沒有時間和沒有時區的僅有日期的值。
要解析傳入的字符串,請使用DateTimeFormatter
定義格式模式。指定Locale
作爲翻譯月份名稱時使用的人類語言。
DateTimeFormatter f = DateTimeFormatter.ofPattern("dd-MMM-uuuu" , Locale.US);
LocalDate localDate = LocalDate.parse("12-Jan-2017" , f);
使用JDBC 4.2及更高版本,可以用setObject
和getObject
方法直接通過LocalDate
到數據庫。
對於尚未更新的JDBC驅動程序,請回退到java.sql類型。
java.sql.Date sqlDate = java.sql.Date.valueOf(localDate);
LocalDate localDate = sqlDate.toLocalDate();
關於java.time
的java.time框架是建立在Java 8和更高版本。這些類取代了日期時間類legacy,如java.util.Date
,Calendar
,& SimpleDateFormat
。
Joda-Time項目現在位於maintenance mode,建議遷移到java.time類。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。規格是JSR 310。
從何處獲取java.time類?
的ThreeTen-Extra項目與其他類擴展java.time。這個項目是未來可能增加java.time的一個試驗場。您可以在這裏找到一些有用的類,如Interval
,YearWeek
,YearQuarter
和more。
'String date'是怎麼樣的?註釋:1)您應該使用'java.util.Date'而不是'java.sql.Date'。 2)你應該使用Joda時間而不是'java.util.Date'。 – BalusC 2010-02-02 12:46:19
「我的java日期有問題」 - 沒關係,每個人都有 – 2010-02-02 13:06:23