У меня здесь странная проблема. Я вызываю даты из базы данных, и я пытаюсь показать даты PostgreSQL, отформатированные как «2013-01-01», для отображения на моем сайте «1 января 2013 года»clj-time всегда возвращает сегодняшнюю дату.
У меня есть следующий код:
(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)
Приведенный выше код делает то, что я хочу, если я проверить его из РЕПЛ:
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=>
Но то, что я получаю на веб-странице, - «1 сентября 2013 года» (сегодня на момент написания этой статьи) и никаких других дат. У меня нет «2013-09-01» в базе данных.
Я вернул исходное значение даты из базы данных из (coerse-mdy) и вернул правильную дату, поэтому ближайший я смог изолировать эту проблему либо в (to-mdy) или (coerce-mdy).
До сих пор я попытался переместить функцию в локальное пространство имен и использовать локализованные значения let.
Вы уверены, что вам нужно unparse, что возвратил дб? В моем собственном использовании clojure.data.sql всегда дает мне фактический объект даты для поля даты в db. – noisesmith
Как я понимаю, вам нужно разобрать то, что возвращается из db - что превращает значение в объект Java, - тогда не разбирайте этот объект. Кажется, что-то вроде петли. Несмотря на это, я не состою в браке с использованием clj-time, поэтому любые альтернативы приветствуются. – dizzystar