2017-04-06 98 views
3

我需要獲取格式爲YYYY-MM-DD的昨天日期(不是基於用戶的,但是相對於服務器)。在Clojure獲取昨天的日期

在Clojure中實現此目的的最佳方法是什麼?

回答

4

與Java 8時API:

(import (java.time LocalDate) 
     (java.time.format DateTimeFormatter)) 

(def formatter (DateTimeFormatter/ofPattern "yyyy-MM-dd")) 

(def yesterday (.minusDays (LocalDate/now) 1)) 

(.format formatter yesterday) 
;; => "2017-04-05" 

或者與Java 8時API Clojure的包裝:clojure.java-time

(require '[java-time :as t]) 

(def yesterday (t/minus (t/local-date) 
         (t/days 1))) 

(t/format "yyyy-MM-dd" yesterday) 
;; => "2017-04-05" 
+0

或者只是'(.minusDays(LocalDate/now)1)' – cfrick

+0

@cfrick對 - 我已經更正了我的答案。 –

3

首先在您的CLJ文件要求這些。

(require [clj-time.core :as t] 
     [clj-time.format :as f]) 

下面的代碼是不言自明的。但不要使用這麼多的defs。

;;To Create Yesterday's date  
(def yesterday 
    (t/minus (t/now) (t/days 1))) 

;; To format as YYYY-MM-DD 
(def custom-formatter (f/formatter "yyyy-MM-dd")) 
(def output-time 
    (f/unparse custom-formatter yesterday)) 

這裏是一個功能更強大的方式:

(defn yesterday [] 
    (let [yesterday-date (t/minus (t/now) (t/days 1)) 
     custom-formatter (f/formatter "yyyy-MM-dd")] 
     (f/unparse custom-formatter yesterday-date))) 

然後做一個函數調用(yesterday)

有關clj-time的更多信息,請參閱documentation