2017-02-23 115 views
0

Попытка выяснить, каков наилучший способ получить разницу между текущим временем и датой дня записи mySQL.Clojure: разница во времени между теперь и записями SQL datetime

Вот отрывок из моего кода

(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 и последней обновляется?

Также, как лучше всего обновить метку времени, если нужно? Скажите, хочу ли я лениво загрузить его в clojure, например: {: NAME "Jim": AGE "24": CHECKDATE "NOW()"}

+0

разницу в секундах? Миз? нс? – ClojureMostly

+0

, вероятно, будет отличаться в секундах лучше – Stixxxx

ответ

0

Учитывая, что у вас есть мгновенное значение (значение, которое начинается с #inst ...), вы можете преобразовать его в миллисекунды, используя функцию inst-ms в clojure, а затем сравнить с текущим временем в миллисекундах.

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

Проблемы с использованием inst-ms '(let [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

Смежные вопросы