一个clojure新手问题。我试图弄清楚将客户端(用任何语言编写)的日期传递给用clojure编写的服务器的最佳方法,该服务器依赖于Datomic数据库。为了避免语言特定类的任何问题,我计划将日期作为RFC3339格式的字符串传递。但是,我在Clojure中解析字符串时遇到了问题。我明显错误的假设是我能做到:
(clojure.instant/parse-timestamp "2014")
因此得到一个瞬间。但是,此调用会导致
clojure.lang.ArityException: Wrong number of args (1) passed to: instant$fn--6183$fn …
这让我很困惑,因为据我所知,这个函数只接受一个参数(格式化的字符串)。
我错过了什么?
答案 0 :(得分:12)
parse-timestamp
是两个参数的函数。时间戳的字符串表示形式是第二个。第一个用于传递一个函数,该函数接受一堆参数并构造一个表示瞬间的对象。 new-instant
的文档字符串中描述了此parse-timestamp
函数的参数 - 有关详细信息,请参阅(doc clojure.instant/parse-timestamp)
。
通常你不需要直接调用parse-timestamp
,因为clojure.instant
导出了一堆用于读取时间戳的函数:
(clojure.instant/read-instant-date "2014-04-23T10:13Z")
;= #inst "2014-04-23T10:13:00.000-00:00"
read-instant-calendar
和read-instant-timestamp
是此类型的另外两个功能。它们都是使用parse-timestamp
构建的,并且有记录其合同的文档字符串。