Vee*_*ich 3 firebird jdbc clojure jaybird
我在使用jdbc的数据库(firebird)中的时间戳有问题
数据库中的数据
timestamp 1994-10-12T00:00:00.000000000-00:00
Run Code Online (Sandbox Code Playgroud)
我用python测试,结果在数据库中是相同的,但是当我使用jdbc(clojure)时
result is 1994-10-11T17:00:00.000000000-00:00
Run Code Online (Sandbox Code Playgroud)
我认为这取决于时区(我在GMT + 7)
如何解决?
谢谢。
此代码
(ns test.core
(:require [clojure.java.jdbc :as jdbc]))
(def firebird-setting {:description "Firebird Database"
:classname "org.firebirdsql.jdbc.FBDriver"
:subprotocol "firebirdsql"
:subname "//localhost:3051//firebird/data/test.fdb"
:user "user"
:password "pass"})
(jdbc/query firebird-setting
"select ts from TestTB")
Run Code Online (Sandbox Code Playgroud)
和结果
({:ts #inst "1994-10-11T17:00:00.000000000-00:00"})
Run Code Online (Sandbox Code Playgroud)
问题在于JDBC要求检索时间戳(无时区信息),就好像该值位于默认(当前)JVM时区中一样。另请参见java.sql.Timestamp时区是否特定?
这意味着,如果存储在数据库中的值为1994-10-12 00:00:00,并且JVM时区为GMT + 7,则将检索1994-10-12 00:00:00+07:00与相同的时间1994-10-11T17:00:00+00:00。
正常的解决方案是:
getTimestamp(int index, Calendar calendar)了Calendar具有适当的时区设置getObject(int index, Class clazz)with LocalDateTime.class作为参数(如果使用Jaybird 3.0.x)。这将检索到的值java.time.LocalDateTime是无时区的,因此没有这些问题。我不了解Clojure,因此很遗憾,我无法提供Clojure的特定答案。
| 归档时间: |
|
| 查看次数: |
276 次 |
| 最近记录: |