clojure - 将日期增加x天的最佳方法

时间:2015-04-01 13:03:26

标签: clojure

我需要读取yyyyMMdd格式的日期字符串并将其增加x天数 - 在我通过转换为millis并在工厂中添加1天然后转换回yyyyMMdd的那一刻。

(.print 
 (.withZone 
  (DateTimeFormat/forPattern "yyyymmdd") (DateTimeZone/forID "EST"))
 (+ 86400000 (.parseMillis 
  (.withZone (DateTimeFormat/forPattern "yyyymmdd")
  (DateTimeZone/forID "EST")) "20150401")))

有更清洁的方法吗? clj-time库不适用于我,我正在使用clojure 1.2

1 个答案:

答案 0 :(得分:1)

由于您无法使用clj-time,这是这种情况下的最佳选择,因此我无法想到比使用org.joda.time更好的事情。

但是,我建议稍微重写一下代码:

  • 这里不需要时区;
  • 您可以创建一次DateTimeFormat对象并重复使用它。

以下是您的功能的外观:

(defn add [date pattern days]
  (let [fmt (DateTimeFormat/forPattern pattern)
        add (* 86400000 days)]
    (->>  date
          (.parseMillis fmt)
          (+ add)
          (.print fmt))))

(add "20150401" "yyyymmdd" 1) ; => "20150402"

如果您不想使用毫秒,则可以使用.parseDateTime代替.parseMillis.plusDays方法会为解析日期添加天数:

(defn add [date pattern days]
  (let [fmt (DateTimeFormat/forPattern pattern)
        dt  (.parseDateTime fmt date)]
    (.print fmt (.plusDays dt days))))