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))))
我需要读取 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))))