new*_*bie 5 java clojure clj-time
我查看了以下问题: 如何在clojure中添加当前日期的天数.
但是我对Clojure很新,我在以下场景中遇到困难我正在以字符串格式获取时间戳.所以我使用以下内容解析它:
(.parse (java.text.SimpleDateFormat. "yyyy-MM-dd") date)
Run Code Online (Sandbox Code Playgroud)
这给我一个看起来像这样的结果:
#inst "2015-02-13T00:20:00.000-00:00"
Run Code Online (Sandbox Code Playgroud)
如何在此添加90天,然后将其转换回字符串格式?我根据以上链接尝试了这个:
(java.util.Date. (+ (* 7 86400 1000)
(.parse (java.text.SimpleDateFormat. "yyyy-MM-dd") date)))
Run Code Online (Sandbox Code Playgroud)
这给了我以下错误:
ClassCastException java.util.Date cannot be cast to java.lang.Number clojure.lang.Numbers.add
Run Code Online (Sandbox Code Playgroud)
parse返回a java.util.Date,你看到的错误告诉你,你不能把a转换Date成a Number.你可以getTime用来获得一个毫秒Date:
(java.util.Date. (+ (* 7 86400 1000)
(.getTime (.parse (java.text.SimpleDateFormat. "yyyy-MM-dd") date))))
Run Code Online (Sandbox Code Playgroud)
这可能会增加7天的日期.如果你想有可能增加90天就需要90更换7,就像这样:(* 90 86400 1000).
您还可以使用java.util.Calendar:
(let [cal (Calendar/getInstance)
d (.parse (java.text.SimpleDateFormat. "yyyy-MM-dd") date)]
(doto cal
(.setTime d)
(.add Calendar/DATE 90)
(.getTime)))
Run Code Online (Sandbox Code Playgroud)
或者更好的是,clj-time:
(require '[clj-time.core :as t])
(require '[clj-time.format :as f])
(t/plus (f/parse (f/formatters :year-month-day) date)
(t/days 90))
Run Code Online (Sandbox Code Playgroud)