8

インターバルの開始日と終了日の間の時間を1日ずつ繰り返すことは可能ですか?clj-timeClojure用のライブラリを使用することも問題ありません!

4

4 に答える 4

14

うん。

このようなもの:

DateTime now = DateTime.now();
DateTime start = now;
DateTime stop = now.plusDays(10);
DateTime inter = start;
// Loop through each day in the span
while (inter.compareTo(stop) < 0) {
    System.out.println(inter);
    // Go to next
    inter = inter.plusDays(1);
}

さらに、Clojure の clj-time の実装は次のとおりです。

(defn date-interval
  ([start end] (date-interval start end []))
  ([start end interval]
   (if (time/after? start end)
     interval
     (recur (time/plus start (time/days 1)) end (concat interval [start])))))
于 2012-08-19T22:01:42.737 に答える
8

これはうまくいくはずです。

(take-while (fn [t] (cljt/before? t to)) (iterate (fn [t] (cljt/plus t period)) from))
于 2012-08-20T00:12:28.130 に答える
2

clj-time を使用すると、-interval は Joda Interval になります。

(use '[clj-time.core :only (days plus start in-days)])
(defn each-day [the-interval f]
 (let [days-diff (in-days the-interval)]
    (for [x (range 0 (inc days-diff))] (f (plus (start the-interval) (days x))))))
于 2012-08-19T22:15:50.033 に答える