首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >clj-time总是返回今天的日期。

clj-time总是返回今天的日期。
EN

Stack Overflow用户
提问于 2013-09-01 23:00:22
回答 1查看 288关注 0票数 1

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

我有以下代码:

代码语言:javascript
复制
(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)))

对数据库的调用如下所示:

代码语言:javascript
复制
(layouts/coerce-mdy startdate)

如果我从REPL测试它,上面的代码可以实现我想要的结果:

代码语言:javascript
复制
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值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-02 11:03:10

在数据库中使用clj-time时,我发现需要在coerce名称空间中使用函数to-sql-datefrom-sql-date (源代码:time/coerce.clj)

这是因为,正如@noisesmith在他的评论中所提到的,大多数clojure sql库将为db中的date字段提供一个date对象(特别是一个java.sql.Date)。这需要与字符串略有不同的处理,以便得到一些与clj-time很好的东西。

假设你的约会对象确实是java.sql.Date,下面的内容应该能做到这一点.

代码语言:javascript
复制
(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)))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18563763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档