0

给定以下字符串,我想得到一个只有日期的日期时间 -

String "2013-02-20T17:24:33Z",我想在忽略时间和秒的情况下获取日期。

以下将起作用 - (parse (formatters :date-time-no-ms) "2013-02-2T17:24:33Z")。但是,生成的日期时间对象也包含秒,我如何将其缩减为 year-month-day ?

一种方法是执行正则表达式并提取所需的详细信息,然后将其解析为日期 - (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 回答
0

使用DateTime方法.withTimeAtStartOfDay

(let [^DateTime dt (parse (formatters :date-time-no-ms) "2013-02-2T17:24:33Z")]
  (.withTimeAtStartOfDay dt))

请注意,类型提示 ^DateTime会显着提高性能。

于 2017-07-24T20:21:17.517 回答