Clojure 如何通过忽略时间和秒将日期解析为clj时间

Clojure 如何通过忽略时间和秒将日期解析为clj时间,clojure,Clojure,给定以下字符串,我希望获得仅包含日期的日期时间- String“2013-02-20T17:24:33Z”,我想在忽略时间和秒的情况下获取日期 下面的方法可以工作-(解析(格式化程序:日期时间不毫秒)“2013-02-2T17:24:33Z”)。但是,生成的日期时间对象也包含秒,如何将其缩减为仅年-月-日 一种方法是执行正则表达式并提取所需的详细信息,然后将其解析为日期- (clojure.core/re-find#“\d{4}-\d{2}-\d{1,2}”2013-02-20T17:24:33

给定以下字符串,我希望获得仅包含日期的日期时间-

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

下面的方法可以工作-
(解析(格式化程序:日期时间不毫秒)“2013-02-2T17:24:33Z”)
。但是,生成的日期时间对象也包含秒,如何将其缩减为仅年-月-日

一种方法是执行正则表达式并提取所需的详细信息,然后将其解析为日期-
(clojure.core/re-find#“\d{4}-\d{2}-\d{1,2}”2013-02-20T17:24:33Z”)
(解析(格式化程序:日期)“2013-02-20”)


但是,应该有更好的方法来实现上述功能,只需使用clj时间?

clj-time
只是Joda-time的包装,因此您可以直接调用
DateTime
对象上的方法,幸运的是有一个方法
DateTime#toDateMidnight()

user=>(解析(格式化程序:日期时间无毫秒)“2013-02-2T17:24:33Z”)
#
user=>(.toDateMidnight(解析(格式化程序:日期时间no ms)“2013-02-2T17:24:33Z”))
#

clj-time
只是Joda-time的包装器,因此您可以直接调用
DateTime
对象上的方法,幸运的是有一个方法
DateTime 35; toDateMidnight()

user=>(解析(格式化程序:日期时间无毫秒)“2013-02-2T17:24:33Z”)
#
user=>(.toDateMidnight(解析(格式化程序:日期时间no ms)“2013-02-2T17:24:33Z”))
#

使用
DateTime
方法

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

请注意,
^DateTime
显著提高了性能。

使用
DateTime
方法
。withTimeAtStartOfDay

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

请注意,
^DateTime
显著提高了性能。

Vladimir感谢上述方法!我还必须把日期定为月份和年份。还有什么方法吗?是的,有:
(>您的日期时间.dayOfMonth.withMinimumValue)
-用于舍入到当前月份的第一天,
(>您的日期时间.monthOfYear.withMinimumValue)
-用于舍入到当前年份的第一个月。Joda Time官方网站()非常擅长描述这些特性,以及它的Javadoc()。感谢Vladimir,这非常有用!Vladimir感谢上述方法!我还必须把日期定为月份和年份。还有什么方法吗?是的,有:
(>您的日期时间.dayOfMonth.withMinimumValue)
-用于舍入到当前月份的第一天,
(>您的日期时间.monthOfYear.withMinimumValue)
-用于舍入到当前年份的第一个月。Joda Time官方网站()非常擅长描述这些特性,以及它的Javadoc()。感谢Vladimir,这非常有用+这一个一个。以上是使用功能特性的一种非常聪明的方法@murtaza52,注意,这只是一个黑客。如果某件事已经存在于库中,你就不应该发明一种方法来做它。@Vladimitavevevevev感谢你对这件事的建议+1。以上是使用功能特性的一种非常聪明的方法@murtaza52,注意,这只是一个黑客。如果某件事已经存在于图书馆中,你就不应该发明一种方法来做它。@Vladimitavevevev感谢你的建议
(let [^DateTime dt (parse (formatters :date-time-no-ms) "2013-02-2T17:24:33Z")]
  (.withTimeAtStartOfDay dt))