6

次の質問を見てきました: How to add days to current date in clojure .

ただし、私は Clojure に非常に慣れていないため、タイムスタンプを文字列形式で取得している次のシナリオに行き詰まっています。したがって、次を使用して解析しています。

(.parse (java.text.SimpleDateFormat. "yyyy-MM-dd") date)

これにより、次のような結果が得られます。

#inst "2015-02-13T00:20:00.000-00:00"

これに90日を追加してから、文字列形式に戻すにはどうすればよいですか? 上記のリンクに基づいてこれを試しました:

(java.util.Date. (+ (* 7 86400 1000) 
                    (.parse (java.text.SimpleDateFormat. "yyyy-MM-dd") date)))

これにより、次のエラーが発生しました。

ClassCastException java.util.Date cannot be cast to java.lang.Number  clojure.lang.Numbers.add
4

4 に答える 4

6

parseを返す場合、表示されているエラーは、 aを a にjava.util.Dateキャストできないことを示しています。のミリ秒を取得するために使用できます。DateNumbergetTimeDate

(java.util.Date. (+ (* 7 86400 1000)
                 (.getTime (.parse (java.text.SimpleDateFormat. "yyyy-MM-dd") date))))

これにより、日付に 7 日が追加される可能性があります。潜在的に 90 日を追加したい場合は、次のように 7 を 90 に置き換える必要があります(* 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)))

またはさらに良いことに、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))
于 2015-02-06T03:57:30.360 に答える
2

clj-timeにはfrom-nowago:

(require '[clj-time.core :refer [days from-now]])

(-> 90 days from-now)

=> #object[org.joda.time.DateTime 0x4d8bcee3 "2017-01-11T16:03:40.067Z"]

(require '[clj-time.core :refer [hours ago]])

(-> 7 hours ago)

=> #object[org.joda.time.DateTime 0x3eef2142 "2016-10-13T09:19:01.246Z"]

利用可能なPeriodType定義: yearsmonthsweeksdayshoursminutesseconds


結果として得られる JodaDateTimeオブジェクトは、ミリ秒単位の unix エポックなど、簡単に操作できます。

(require '[clj-time.core :refer [days from-now]])
(require '[clj-time.coerce :as coerce])

(coerce/to-long (-> 90 days from-now))

=> 1484150620067

于 2016-10-13T16:22:25.610 に答える
0

このソリューションは次を返しますjava.util.Date

(defn add-days-to-instant [num-days ^java.util.Date d]
  (.getTime (let [cal (Calendar/getInstance)]
              (doto cal
                (.setTime d)
                (.add Calendar/DATE num-days)))))
于 2017-09-10T16:39:55.383 に答える