在clojure中将非整数转换为day

时间:2015-08-21 05:57:10

标签: datetime clojure

我有一个函数,它基本上包含一个日期字符串和添加到给定日期字符串的天数

(defn add-period [date-string d]
  (t/plus (tf/parse (tf/formatter "yyyy-MM-dd") date-string) (t/days d)))

我们称之为函数

(add-period "2014-05-12" 7)
;=>  #object[org.joda.time.DateTime 0x2002348 2014-05-19T00:00:00.000Z]


(add-period "2014-05-12" -7)
;=>  #object[org.joda.time.DateTime 0x2002348 2014-05-5T00:00:00.000Z]


(add-period "2014-05-12" 365)
;=>  #object[org.joda.time.DateTime 0x2002348 2015-05-5T00:00:00.000Z]

但我也想这样做:

(add-period "2014-05-12" 0.5)

0.5将增加半天,而0.956将增加(57分36秒)

如果函数被重构以适应这种用例,我将不胜感激

我认为有人对此提出了一个问题:

t/days doc misleading or bug?

1 个答案:

答案 0 :(得分:2)

您可以使用毫秒。 E.g:

$ lein try clj-time 0.11.0
...
user=> (require '[clj-time.core :as t])
nil
user=> (import 'org.joda.time.DateTimeConstants)
org.joda.time.DateTimeConstants
user=> (t/plus (t/date-time 2015 8 21) (t/millis (* 0.5 (DateTimeConstants/MILLIS_PER_DAY))))
#<DateTime 2015-08-21T12:00:00.000Z>
user=> (t/plus (t/date-time 2015 8 21) (t/millis (* 0.956 (DateTimeConstants/MILLIS_PER_DAY))))
#<DateTime 2015-08-21T22:56:38.400Z>