如何在Clojure中添加日期到日期

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)

Rod*_*ada 5

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)

  • "这增加了7天的日期" - 如果只有每一天都是'86400`秒,这并非总是如此 (3认同)