2017-02-23 9 views
0

現在の時刻とmySQLレコードのdatetimeの違いを調べる最も良い方法を見つけようとしています。ここでClojure:現在のレコードとSQ​​Lのレコードとの時差

は、私のコードのスニペット

(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と最後の更新との間の比較を実行するための最良の方法は何ですか?ですか

タイムスタンプを更新するにはどうすればよいですか? {:NAME "Jim":AGE "24":CHECKDATE "NOW()"}

+0

差は?ミズ? ns? – ClojureMostly

+0

がおそらく秒単位で最も良いでしょう – Stixxxx

答えて

0

あなたが瞬時値を持つことを考えれば、 #inst ...)、クロージャでinst-ms関数を使用してこれをミリ秒に変換し、現在の時間(ミリ秒)と比較することができます。あなたはClojureの1.9を使用していない場合

(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")) 

、あなただけinst.getTimeを呼び出すことができます。

(.getTime #inst"2017") 

は、MySQLを使用して現在の時刻を挿入するには、内蔵の使用を含むいくつかのオプションを持っていますNOW()関数を使用して、honeysqlを使用してアクセスできます。

ただし、すでに使用しているとして、CLJ-time.coerceのヘルプを使用して、純粋なJBDCベースのアプローチ、用:秒

(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)}) 
+0

inst -ms 'を使用する際の問題(' [zyx(inst-ms#inst "2017-02-23T08:20:15.000000000-00:00")](println zyx)) '。 'CompilerException java.lang.RuntimeException:このコンテキストではシンボル:inst-msを解決できません、'コンパイル中です。私はClojure 1.8.0を使用していますが、別のバージョンを使用する必要がありますか? – Stixxxx

+0

@Stixxxx私はちょうど答えを更新しました。代わりに '(.getTime #inst" 2017 ")'を呼び出してください。 – Josh

+0

ありがとう、これは素晴らしい作品! – Stixxxx

関連する問題