2014-11-25 9 views
8

Jestem nowy na clojure, czy ktoś może mi pomóc zrozumieć, w jaki sposób mogę uzyskać aktualną datę w clojure, a następnie dodawać do niej dni? np. dodając 3 dni do bieżącej daty?Dodaj dni do aktualnej daty

Odpowiedz

7

idiomatyczne Clojure sposobem jest użycie clj-time (patrz link Leiningen/Maven zainstalować instrukcje), który otacza czas Joda wymieniony przez pierwszą odpowiedź od overthink.

user=> (use '[clj-time.core]) 
nil 
user=> (now) 
#<DateTime 2014-11-25T12:03:34.714Z> 
user=> (plus (now) (days 3)) 
#<DateTime 2014-11-28T12:05:40.888Z> 
4

To nie jest odpowiedź specyficzna dla Clojure, naprawdę, ale użyłbym Joda time.

(import 'org.joda.time.DateTime) 
(let [now (DateTime/now) 
     later (.plusDays now 3)] 
    [now later]) 

;; [#<DateTime 2014-11-24T23:26:05.885-05:00> #<DateTime 2014-11-27T23:26:05.885-05:00>] 
+0

Można to zrobić specyficznie dla Clojure, wskazując na owinięcie "clj-time" wokół czasu Joda. :) – xsc

+0

@xsc Wystarczająco fair. Wygląda na to, że ktoś inny udzielił takiej odpowiedzi. – overthink

+0

Czy ta odpowiedź/naprawdę/wymaga downvote? Czy osoba przekazująca wniosek może wyjaśnić? – overthink

1
user> (import '[java.util Calendar]) 
;=> java.util.Calendar 
user> (defn days-later [n] 
     (let [today (Calendar/getInstance)] 
      (doto today 
      (.add Calendar/DATE n) 
      .toString))) 
#'user/days-later 
user> (println "Tomorrow: " (days-later 1)) 
;=> Tomorrow: #inst "2014-11-26T15:36:31.901+09:00" 
;=> nil 
user> (println "7 Days from now: " (days-later 7)) 
;=> 7 Days from now: #inst "2014-12-02T15:36:44.785+09:00" 
;=> nil