您正在使用現在由java.time類代替的麻煩舊類。
以下是如何按照Jon Skeet在對該問題的評論中發表的建議。
java.time
的java.time框架是建立在Java 8和更高版本。這些課程取代了老的麻煩日期時間課程,如java.util.Date
,.Calendar
,& java.text.SimpleDateFormat
。 Joda-Time團隊還建議遷移到java.time。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。
許多java.time功能被移植到Java中,並在ThreeTen-Backport中被移植到Java中,並進一步適用於Android中的ThreeTenABP。
OffsetDateTime
您可以分析輸入字符串作爲OffsetDateTime
對象。
OffsetDateTime odt = OffsetDateTime.parse("2016-07-21T21:30:47.492+0000");
如果你的JDBC驅動程序與JDBC 4.2或更高版本的規定,您可以通過/取通過PreparedStatement::setObject
和ResultSet::getObject
方法爲SQL。如果不是,則轉換爲舊的java.sql類型。
轉換需要一個Instant
對象。 Instant
是java.time中更基本的構造塊類,缺少OffsetDateTime
的靈活性。 Instant
類表示UTC中時間軸上的一個時刻,分辨率高達納秒。從OffsetDateTime
中提取Instant
。
Instant instant = odt.toInstant();
將Instant
傳遞給添加到舊的java.sql類的新方法。
java.sql.Timestamp ts = java.sql.Timestamp.from(instant);
然後調用PreparedStatement::setTimestamp
和ResultSet::getTimestamp
方法。
myPreparedStatement.setTimestamp(1 , ts);
…
java.sql.Timestamp ts = myResultSet.getTimestamp(1);
取出一個java.sql.Timestamp
後,立即轉換爲java.time類,Instant
。只有在JDBC驅動程序缺少對java.time類型的直接支持的情況下才使用java.sql類,即使如此,也最大限度地減少了對java.sql類的使用。你的業務邏輯在java.time中工作嗎?
Instant instant = ts.toInstant();
混亂的類名
不要混淆與Java捆綁在一起的兩個老Date
類。 java.util.Date
代表日期和。 A java.sql.Date
旨在僅表示沒有日期時間的日期值(但由於它是笨拙的類設計的笨拙攻擊,實際上確實存在時間問題)。
完全避免java.util.Date
和java.util.Calendar
和java.text.SimpleDateFormat
類。如上所述,儘量減少您對類的使用。
您正在使用哪種數據庫軟件? –
你到目前爲止嘗試過什麼?這聽起來像你應該基本上解析字符串,可能是java.util.Date或java.time.Instant,然後轉換爲java.sql.Timestamp並在PreparedStatement中使用。 –
Toad for Oracle –