簡體   English   中英

使用Java和Spring在Oracle數據庫中插入UTC / GMT日期

[英]Insert UTC/GMT date in Oracle database with Java and Spring

當我使用jdbcTemplatenew 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時區轉換您的日期。 您可以使用以下選項之一:

  • 如果您使用的是PreparedStatement,則可以使用setDate(int parameterIndex, Date x, Calendar cal)方法以UTC時區指定Calendar
  • 對於Spring jdbcTemplate而不是插入Date對象,請插入帶有UTC時區的Calendar
  • 可以在JVM lvl上設置TimeZone.setDefault(TimeZone.getTimeZone("GMT"))
  • 在JVM啟動時使用-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM