Clojure clj时间总是在今天返回';这是我的约会。

Clojure clj时间总是在今天返回';这是我的约会。,clojure,clj-time,Clojure,Clj Time,我这里有个奇怪的问题。我从数据库中调用日期,并试图显示格式为“2013-01-01”的PostgreSQL日期,以便在我的网站上显示为“2013年1月1日” 我有以下代码: (ns mr.layouts (:require [clj-time.format :as ctf])) (def to-mdy (ctf/formatter "MMMM d, yyyy")) (defn coerce-mdy [sd] (ctf/unparse to-mdy (ctf

我这里有个奇怪的问题。我从数据库中调用日期,并试图显示格式为“2013-01-01”的PostgreSQL日期,以便在我的网站上显示为“2013年1月1日”

我有以下代码:

(ns mr.layouts
  (:require 
            [clj-time.format :as ctf]))


(def to-mdy (ctf/formatter "MMMM d, yyyy"))

(defn coerce-mdy [sd]
  (ctf/unparse to-mdy (ctf/parse sd)))
对数据库的调用如下所示:

(layouts/coerce-mdy startdate)
如果我从REPL测试它,上面的代码就是我想要的:

mr.handler=> (use 'mr.layouts)
nil
mr.handler=> (require '[clj-time.format :as ctf])
nil
mr.handler=> (coerce-mdy "2012-01-01")
"January 1, 2012"
mr.handler=> (coerce-mdy "2014-10-04")
"October 4, 2014"
mr.handler=> 
但我在网页上看到的是“2013年9月1日”(截至本文撰写之日的今天),没有其他日期。数据库中没有“2013-09-01”

我已经从(coerse-mdy)返回了数据库中的原始日期值,它返回了正确的日期,因此我能够发现的最接近于(to-mdy)或(强制mdy)的问题


到目前为止,我已经尝试将函数移动到本地名称空间并使用本地化的let值。

在数据库中使用
clj-time
时,我发现我需要使用
强制
名称空间中的
到sql-date
从sql-date
函数(来源:此处)

这是因为,正如@noisesmith在他的评论中提到的,大多数clojure sql库都会为数据库中的日期字段提供一个日期对象(特别是java.sql.date)。这需要稍微区别于字符串来处理,以便获得能够很好地使用clj时间的东西

假设您的日期确实是一个java.sql.date,下面的步骤应该可以做到这一点

(ns mr.layouts
  (:require [clj-time.format :as ctf]
            [clj-time.coerce :as coerce]))

(def to-mdy (ctf/formatter "MMMM d, yyyy"))

(defn coerce-mdy [sd]
  (ctf/unparse to-mdy (coerce/from-sql-date sd)))

在对数据库使用
clj-time
时,我发现我需要使用
强制
命名空间中的
到sql日期
从sql日期
函数(来源:此处)

这是因为,正如@noisesmith在他的评论中提到的,大多数clojure sql库都会为数据库中的日期字段提供一个日期对象(特别是java.sql.date)。这需要稍微区别于字符串来处理,以便获得能够很好地使用clj时间的东西

假设您的日期确实是一个java.sql.date,下面的步骤应该可以做到这一点

(ns mr.layouts
  (:require [clj-time.format :as ctf]
            [clj-time.coerce :as coerce]))

(def to-mdy (ctf/formatter "MMMM d, yyyy"))

(defn coerce-mdy [sd]
  (ctf/unparse to-mdy (coerce/from-sql-date sd)))

您确定需要解析数据库返回的内容吗?在我自己的用法中,clojure.data.sql总是为数据库中的日期字段提供一个实际的日期对象。我的理解是,您必须解析从数据库返回的内容——这将值转换为Java对象——然后解析该对象。我想这有点荒唐。无论如何,我不会使用clj时间,所以欢迎使用任何替代方法。您确定需要解析db返回的内容吗?在我自己的用法中,clojure.data.sql总是为数据库中的日期字段提供一个实际的日期对象。我的理解是,您必须解析从数据库返回的内容——这将值转换为Java对象——然后解析该对象。我想这有点荒唐。不管怎样,我不想使用clj时间,所以任何替代方案都是受欢迎的。谢谢我看着那些强迫的东西,觉得这样也行。我仍然有点困惑,为什么它可以从REPL中工作,但不能在真正的应用程序中工作。在上面的REPL示例中,您给它一个字符串,db返回的不是字符串。工作非常完美。谢谢我看着那些强迫的东西,觉得这样也行。我仍然有点困惑,为什么它可以从REPL中工作,但不能在真正的应用程序中工作。在上面的REPL示例中,您给它一个字符串,db返回的不是字符串。