鉴于以下字符串,我想获得一个只有日期的日期时间 -
字符串"2013-02-20T17:24:33Z"
,我想在忽略时间和秒的情况下得到一个日期。
以下内容可行 - (parse (formatters :date-time-no-ms) "2013-02-2T17:24:33Z")
。但是,生成的日期时间对象还包含秒,如何将其减少到仅仅年月?
一种方法是使用正则表达式并提取所需的详细信息,然后将其解析为日期 -
(clojure.core/re-find #"\d{4}-\d{2}-\d{1,2}" "2013-02-20T17:24:33Z")
(parse (formatters :date) "2013-02-20")
然而,仅使用clj-time应该有更好的方法来实现上述目标吗?
答案 0 :(得分: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>
答案 1 :(得分: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)
答案 2 :(得分:0)
使用DateTime
方法.withTimeAtStartOfDay
:
(let [^DateTime dt (parse (formatters :date-time-no-ms) "2013-02-2T17:24:33Z")]
(.withTimeAtStartOfDay dt))
请注意,type hint ^DateTime
会显着提升效果。