Clojure:现在和记录SQL datetime之间的时差

时间:2017-02-23 10:51:19

标签: datetime clojure

尝试找出最新方法来获取当前时间与mySQL记录的日期时间之间的差异。

以下是我的代码片段

(ns clojure.example.hello
  (:require [clj-time.coerce :as coerce]
            [clj-time.local :as l]))

(let [timenow (l/local-now) ;; #object[org.joda.time.DateTime 0x333e8ce5 2017-02-23T21:44:11.022+11:00]
      last-update (gettimelogged :timestamp) 
      ;; returns SQL datetime which is 2017-02-23 19:20:15, 
      ;; but gets converted into #inst "2017-02-23T08:20:15.000000000-00:00"]

 (println (timenow - lastupdate)))

在timenow和last-updated之间进行比较的最佳方法是什么?

如果需要,还有什么更新时间戳的最佳方法?如果我想懒惰加载到clojure,有时候像{:NAME“Jim”:AGE“24”:CHECKDATE“NOW()”}

1 个答案:

答案 0 :(得分:0)

假设您有一个即时值(以#inst ...开头的值),您可以使用clojure中的inst-ms函数将其转换为毫秒,然后以毫秒为单位与当前时间进行比较。

(let [db-ms (inst-ms #inst"2017-02-23T08:20:15.000000000-00:00")
      now-ms (System/currentTimeMillis)]
  (println "Difference is" (- now-ms db-ms) "ms"))

如果您没有使用clojure 1.9,则可以在.getTime上致电inst

(.getTime #inst"2017")

要使用MySQL插入当前时间,您有几个选项,包括使用内置的NOW()函数,您可以使用honeysql来访问。

然而,对于纯粹的基于jbdc的方法,使用clj-time.coerce的帮助,正如您已经使用的那样:

(defn get-sql-now []
  (-> (System/currentTimeMillis)
      coerce/from-long
      coerce/to-sql-time))

(j/insert! mysql-db "joshtable" {:name "Jim"
                                 :age 24
                                 :checkdate (get-sql-now)})