[英]Insert UTC/GMT date in Oracle database with Java and Spring
當我使用jdbcTemplate
將new Date()
對象插入Oracle數據庫時,我可以看到jdbc驅動程序或Spring jdbcTemplate使用本地JVM偏移量插入Date
。
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date timeZoneDate = sdf.parse("09-SEP-1987");
例如,當我插入在GMT中創建的Date對象時,如果JVM時區是USA,則將此結果插入到Oracle數據庫中的08-SEP-1987中。
java.util.Date
和Oracle Date
都不存儲時區信息。 在您的情況下,Jdbc驅動程序使用JVM時區轉換您的日期。 您可以使用以下選項之一:
setDate(int parameterIndex, Date x, Calendar cal)
方法以UTC時區指定Calendar
。 jdbcTemplate
而不是插入Date
對象,請插入帶有UTC
時區的Calendar
TimeZone.setDefault(TimeZone.getTimeZone("GMT"))
-Duser.timezone=GMT
Oracle DATE
數據類型沒有時區字段。 它僅存儲日期和時間組件。 因此,當jdbc
將帶有時區的DATE
插入DATE
數據庫字段時,它必須決定如何處理將消失的時區信息。
在您的情況下,似乎jdbc
在插入之前將java Date
轉換為語言環境時區。 日期09-SEP-1987 00:00:00 UTC
轉換為08-SEP-1987 20:00:00 EST
,插入時刪除時區信息。
知道這一點,您可以在插入DATE
字段時不指定時區,以便使用默認的區域設置時區或修改默認時區和Java Date
時區。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.