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

clojure-将日期增加x天的最佳方式,clojure,Clojure,我需要读取yyyyMMdd格式的日期字符串,并将其增加x个天数-在转换为毫秒并在mills中添加1天,然后转换回yyymmdd的那一刻 (.print (.withZone (DateTimeFormat/forPattern "yyyymmdd") (DateTimeZone/forID "EST")) (+ 86400000 (.parseMillis (.withZone (DateTimeFormat/forPattern "yyyymmdd") (DateTime

我需要读取yyyyMMdd格式的日期字符串,并将其增加x个天数-在转换为毫秒并在mills中添加1天,然后转换回yyymmdd的那一刻

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

有没有更干净的方法?clj时间库对我不可用,我正在使用clojure 1.2

,因为您不能使用
clj时间
,这是在这种情况下的最佳选择,我想不出比您使用
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))))


是的,这就是我最终会做的,我只是在repl上测试它-谢谢though@redhands好的,您可以使用
.parseDateTime
而不是
.parseMillis
。如果您不想使用毫秒,那么plusDays
方法会在解析日期中添加天数。“很难,我怀疑它会简化你的代码。”红人在我的答案中添加了它。