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

clojure - best way to increase date by x days

我需要读取 yyyyMMdd 格式的日期字符串并将其增加 x 天数 - 在我这样做的那一刻,我通过转换为 millis 并在 mills 中添加 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

既然你不能使用 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))))