java.sql.Timestamp 的儲存是否受時區影響?
在 JDBC 中,setTimestamp() 方法的行為與 java.sql 相同。時間戳可能因驅動程式而異
驅動程式的行為:
大多數驅動程式都遵守javadoc 中針對setTimestamp(int parameterIndex, Timestamp x, Calendar cal ) 概述的規則。如果未提供 Calendar 對象,則驅動程式通常使用執行應用程式的虛擬機器的時區。
資料庫中的時間戳記儲存:
當使用setTimestamp( intparameterIndex, Timestamp x) 如果不指定日曆,驅動程式會將時間戳轉換為VM 的時區,然後再將其儲存到資料庫中。如果資料庫列缺少時區信息,此轉換可能會導致時區資料遺失。
範例:
考慮 GMT 2 的本地時區, UTC 時間戳為「2012-12-25 10:00:00 UTC」。儲存到資料庫後,時間戳顯示為「2012-12-25 12:00:00」(GMT 2)。如果應用程式在 GMT 0 檢索時間戳,則時間戳將被解釋為「2012-12-25 12:00:00 UTC」。
在特定時區儲存時間戳:
要儲存特定時區的時間戳,請使用setTimestamp(int parameterIndex, Timestamp x, Calendar cal) 與所需的日曆實例(例如,對於GMT,Calendar.getInstance(TimeZone.getTimeZone("GMT")))。
時間戳檢索:
類似地,檢索時間戳時,請確保使用與儲存時相同的時區
在JDBC 4.2 使用java.time.LocalDateTime :
在JDBC 4.2 在相容驅動程式中,您可以使用 java.time.LocalDateTime (和 java.time.LocalDateTime)。 LocalTime)透過 get/set/updateObject 方法使用 TIMESTAMP 和 TIME 類型。這些類別代表沒有時區的時間。
以上是Java 的 java.sql.Timestamp 儲存是否取決於時區?的詳細內容。更多資訊請關注PHP中文網其他相關文章!