尝试找出最新方法来获取当前时间与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()”}
答案 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)})