我这里有个奇怪的问题。我正在调用数据库中的日期,并试图将格式化为"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“。
我已经从数据库(胁迫-mdy)返回原始日期-值,它返回正确的日期,所以我能够隔离这个问题的最接近的是( to -mdy)或(胁迫-mdy)。
到目前为止,我已经尝试将函数移动到本地命名空间,并使用本地化的let值。
发布于 2013-09-02 11:03:10
在数据库中使用clj-time时,我发现需要在coerce名称空间中使用函数to-sql-date和from-sql-date (源代码:time/coerce.clj)
这是因为,正如@noisesmith在他的评论中所提到的,大多数clojure sql库将为db中的date字段提供一个date对象(特别是一个java.sql.Date)。这需要与字符串略有不同的处理,以便得到一些与clj-time很好的东西。
假设你的约会对象确实是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)))https://stackoverflow.com/questions/18563763
复制相似问题