clojure-将日期增加x天的最佳方式
我需要读取yyyyMMdd格式的日期字符串,并将其增加x个天数-在转换为毫秒并在mills中添加1天,然后转换回yyymmdd的那一刻clojure-将日期增加x天的最佳方式,clojure,Clojure,我需要读取yyyyMMdd格式的日期字符串,并将其增加x个天数-在转换为毫秒并在mills中添加1天,然后转换回yyymmdd的那一刻 (.print (.withZone (DateTimeFormat/forPattern "yyyymmdd") (DateTimeZone/forID "EST")) (+ 86400000 (.parseMillis (.withZone (DateTimeFormat/forPattern "yyyymmdd") (DateTime
(.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
方法会在解析日期中添加天数。“很难,我怀疑它会简化你的代码。”红人在我的答案中添加了它。