亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將java.util.Date轉換為java.sql.Date?

如何將java.util.Date轉換為java.sql.Date?

素胚勾勒不出你 2019-06-18 15:05:04
如何將java.util.Date轉換為java.sql.Date?我試著用java.util.Date作為輸入,然后使用它創建一個查詢-所以我需要一個java.sql.Date.我驚訝地發現,它不能隱式或顯式地進行轉換-但我甚至不知道該如何做,因為JavaAPI對我來說仍然是相當新的。
查看完整描述

3 回答

?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

如何將java.util.Date轉換為java.sql.Date?

別。這兩門課都過時了。

  • 使用

    java.time

    類而不是遺留類

    java.util.Date & java.sql.Date

    使用JDBC 4.2或更高版本。
  • 如果與尚未更新的代碼進行互操作,則轉換為/從java.time轉換為java.time。

示例查詢PreparedStatement.

myPreparedStatement.setObject( 
    … ,                                         // Specify the ordinal number of which argument in SQL statement.
    myJavaUtilDate.toInstant()                  // Convert from legacy class `java.util.Date` (a moment in UTC) to a modern `java
    .time.Instant` (a moment in UTC).
        .atZone( ZoneId.of( "Africa/Tunis" ) )  // Adjust from UTC to a particular time zone, to determine a date. Instantiating a 
        `ZonedDateTime`.
        .toLocalDate()                          // Extract a date-only `java.time.LocalDate` object from the date-time
         `ZonedDateTime` object.)

替代者:

  • Instant

    而不是

    java.util.Date

    兩者都代表了世界協調時的一個時刻。但是現在只有納秒而不是毫秒。
  • LocalDate

    而不是

    java.sql.Date

    這兩種方法都表示一個日期純值,不包括一天中的某個時間,也沒有一個時區.

細節

如果您試圖使用僅限日期的值(沒有一天的時間,也沒有時區),請使用LocalDate類而不是java.util.Date.


java.time

在Java 8和更高版本中,與Java早期版本捆綁在一起的麻煩的舊日期時間類已經被新的java.time包..看見Oracle教程..中的大部分功能都已移植到Java 6和7中。Threeten-Backport并進一步適應了ThreeTenABP.

SQL數據類型 DATE意味著只有約會,沒有時間,沒有時區。JAVA從來沒有過這樣一個類?,直到java.time.LocalDate在Java 8中,讓我們根據特定的時區獲取今天的日期來創建這樣的值(例如,在確定日期時,時區在巴黎比Montréal更早)。

LocalDate todayLocalDate = LocalDate.now( ZoneId.of( "America/Montreal" ) );  // Use proper "continent/region" time zone names; never use
 3-4 letter codes like "EST" or "IST".

在這一點上,我們可以完成。如果你JDBC驅動程序遵守JDBC 4.2規范,您應該能夠通過LocalDate通孔setObject在.上PreparedStatement若要存儲到SQL日期字段中,請執行以下操作。

myPreparedStatement.setObject( 1 , localDate );

同樣,使用ResultSet::getObject從SQLDate列獲取到JavaLocalDate對象。在第二個參數中指定類將使您的代碼類型安全.

LocalDate localDate = ResultSet.getObject( 1 , LocalDate.class );

換句話說,在JDBC4.2中,整個問題與此無關。或者晚些時候。

如果您的JDBC驅動程序不以這種方式執行,則需要返回到java.sql類型。

轉換為java.sql.Date

若要進行轉換,請使用添加到舊日期時間類中的新方法。我們可以打電話java.sql.Date.valueOf(…)轉換為LocalDate.

java.sql.Date sqlDate = java.sql.Date.valueOf( todayLocalDate );

朝另一個方向走。

LocalDate localDate = sqlDate.toLocalDate();

轉換自java.util.Date

雖然您應該避免使用舊的日期-時間類,但在使用現有代碼時可能會被迫使用。如果是這樣,您可以轉換到/從java.time。

通過Instant類,它表示UTC中時間線上的某個時刻。阿Instant在概念上與java.util.Date..但請注意Instant有一個決議納秒java.util.Date只有毫秒決議。

若要進行轉換,請使用添加到舊類中的新方法。例如,java.util.Date.from( Instant )java.util.Date::toInstant.

Instant instant = myUtilDate.toInstant();

要確定日期,我們需要時區的上下文。在任何特定時刻,全球各地的日期都會因時區而異。應用aZoneId得到一個ZonedDateTime.

ZoneId zoneId = ZoneId.of ( "America/Montreal" );ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneId );LocalDate localDate = 
zdt.toLocalDate();

?java.sql.Date類假裝只有日期,沒有一天的時間,但實際上是嗎?一天中的一段時間,調整到午夜時間。困惑?是的,以前的約會課糟透了。


關于java.time

這個java.time框架構建在Java 8及更高版本中。這些階級取代了那個煩人的老人。遺產日期-時間類,如java.util.DateCalendar, & SimpleDateFormat.

這個尤達-時間項目,現在在維護模式,建議遷移到java.time上課。

若要了解更多信息,請參見Oracle教程..并搜索堆棧溢出的許多例子和解釋。規格是JSR 310.

你們可以交換java.time對象直接使用數據庫。用JDBC驅動程序符合JDBC 4.2或者晚些時候。不需要字符串,不需要字符串java.sql.*上課。

在哪里獲得java.time類?

這個三次-額外項目使用其他類擴展java.time。這個項目是java.time將來可能添加的一個試驗場。您可能會在這里發現一些有用的類,例如IntervalYearWeekYearQuarter,和更多.


查看完整回答
反對 回復 2019-06-18
  • 3 回答
  • 0 關注
  • 1321 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號