0

次の文字列を指定すると、日付のみで日時を取得したいと思います-

String "2013-02-20T17:24:33Z"、時間と秒を無視して日付を取得したいと思います。

以下は動作します - (parse (formatters :date-time-no-ms) "2013-02-2T17:24:33Z")。ただし、結果の日時オブジェクトには秒も含まれていますが、年-月-日だけにするにはどうすればよいですか?

1つの方法は、正規表現を実行して必要な詳細を抽出し、それを日付に解析することです- (clojure.core/re-find #"\d{4}-\d{2}-\d{1,2}" "2013-02-20T17:24:33Z") (parse (formatters :date) "2013-02-20")

ただし、 clj-time を使用するだけで、上記のより良い方法があるはずです。

4

3 に答える 3

4

clj-timeは Joda Time の単なるラッパーなので、DateTimeオブジェクトのメソッドを直接呼び出すことができます。幸いなことに、次のメソッドがありますDateTime#toDateMidnight()

user=> (parse (formatters :date-time-no-ms) "2013-02-2T17:24:33Z")
#<DateTime 2013-02-02T17:24:33.000Z>
user=> (.toDateMidnight (parse (formatters :date-time-no-ms) "2013-02-2T17:24:33Z"))
#<DateMidnight 2013-02-02T00:00:00.000Z>
于 2013-03-02T19:16:12.343 に答える
1
(defn floor [dt f] 
  (apply date-time 
    (map #(%1 dt) 
      (take-while (partial not= f) [year month day hour minute sec milli]))))

(floor (parse (formatters :date-time-no-ms) "2013-02-2T17:24:33Z") hour)
于 2013-03-04T06:06:18.610 に答える