Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Clojure中实施临时调整_Clojure_Java Time - Fatal编程技术网

如何在Clojure中实施临时调整

如何在Clojure中实施临时调整,clojure,java-time,Clojure,Java Time,Clojure新手,这里 我正在尝试在Clojure中实现一个。我有以下资料: (ns pto-calculator.logic.pay-periods (:require [java-time :as j])) (def next-pay-period (reify java.time.temporal.TemporalAdjuster (adjustInto [this temporal] (let [local-date (java.time.LocalDat

Clojure新手,这里

我正在尝试在Clojure中实现一个。我有以下资料:

(ns pto-calculator.logic.pay-periods
  (:require [java-time :as j]))

(def next-pay-period
  (reify java.time.temporal.TemporalAdjuster
    (adjustInto [this temporal]
      (let [local-date (java.time.LocalDate/from temporal)
            day-of-month (.getDayOfMonth local-date)]
        (if (< 14 day-of-month)
          (j/plus local-date (j/days (- 14 day-of-month)))
          (j/adjust local-date :last-day-of-month))))))

(defn get-next-pay-period [date]
  (j/adjust date next-pay-period))
今天是3月2日,所以我希望
get next pay period
会在3月14日返回,但我得到了一个例外:

Caused by: java.lang.ClassCastException: java_time.local$local_date cannot be cast to java.time.temporal.Temporal
    at java_time.adjuster$adjust.invokeStatic(adjuster.clj:64)
    at java_time.adjuster$adjust.doInvoke(adjuster.clj:40)
    at clojure.lang.RestFn.invoke(RestFn.java:425)
    at pto_calculator.logic.pay_periods$get_next_pay_period.invokeStatic(pay_periods.clj:19)
    at pto_calculator.logic.pay_periods$get_next_pay_period.invoke(pay_periods.clj:18)
我的困惑是:
(j/local date)
返回
java.time.LocalDate
的实例,这是一个
时态的
(根据)。那么为什么这不起作用呢

我也试过:

(defn get-next-pay-period [^java.time.temporal.Temporal date]
...
但在这种情况下,我得到了这个错误:

java_time.local$local_date cannot be cast to java.time.temporal.Temporal

java\u-time.local$local\u-date
java.time.LocalDate
之间是否有区别?

您没有在核心命名空间中调用
java-time/local-date
。您正在将一个函数传递给
获取下一个付款期

而不是:

(defn -main
  [& args]
  (p/get-next-pay-period j/local-date))
尝试:


您可能还对
tupelo.java time
中的Clojure日期/时间助手方法感兴趣。文档在这里:单元测试在这里显示了它的作用:
(defn -main
  [& args]
  (p/get-next-pay-period j/local-date))
(defn -main
  [& args]
  (p/get-next-pay-period (j/local-date)))