Clojure 持久化到数据库时的一天差异
My db的dob列如下所示:Clojure 持久化到数据库时的一天差异,clojure,h2,korma,clj-time,Clojure,H2,Korma,Clj Time,My db的dob列如下所示: | dob | +------------+ | 1935-06-05 | 对于使用korma和lobos对内存中H2数据库进行的TDD I测试: (:use (lobos [migration :only [defmigration]] core schema config) ( :require [korma.core :as k] ) (defmigration create-table-readings (up [] (create
| dob |
+------------+
| 1935-06-05 |
对于使用korma和lobos对内存中H2数据库进行的TDD I测试:
(:use (lobos [migration :only [defmigration]] core schema config)
( :require [korma.core :as k] )
(defmigration create-table-readings
(up [] (create
(table :readings
(date :dob :not-null)
)))
(down [] (drop
(table :readings))))
(defn insert
[row]
(k/insert readings (k/values row)))
我有一个用于转换日期字符串的助手选项:
(:require
[clj-time.core :as t]
[clj-time.format :as f]
[clj-time.coerce :as c])
(def custom-formatter (f/formatter "yyyy-MM-dd"))
(defn from-sql-to-string
"formats date from sql date to string"
[sql-time]
(f/unparse custom-formatter
(c/from-sql-date sql-time)))
(defn from-string-to-sql
"formats date string and returns sql date"
[string-time]
(c/to-sql-date string-time))
然而,当我以某种方式测试存储和检索时,我总是会在日期之间获得一天的差异:
(deftest database-insert-tests
(testing "Testing simple insert"
(let [test-row { :dob "1935-06-05" }]
(database/insert test-row)
(let [first-row (first (database/select-all))]
(is (= test-row
(assoc first-row
:dob
(t/from-sql-to-string (:dob first-row)))
))))))
不合格:实际:(不({:dob“1935-06-05”}{:dob“1935-06-04”}))
您试图调试您的问题是什么?您是否检查了DB表中实际存储的值?您的
从sql到字符串
和从字符串到sql
函数传递和返回的值是什么?不要认为这是一个问题,我怀疑一些日间差异问题可能会在一天的开始/结束时得到不同的处理。确切地说,我的想法和您使用日期/时间API的函数可能是问题的根源。尽管如此,我还是会检查它们和数据库表的内容?您是否检查了DB表中实际存储的值?您的从sql到字符串
和从字符串到sql
函数传递和返回的值是什么?不要认为这是一个问题,我怀疑一些日间差异问题可能会在一天的开始/结束时得到不同的处理。确切地说,我的想法和您使用日期/时间API的函数可能是问题的根源。我会检查它们和数据库表的内容。