Ответ 1
Вам нужно передать экземпляр java.sql.Timestamp
. Чтобы проанализировать вашу строку в одном, используя clj-time
, Joda-Time -wrapping для Clojure, вы бы сделали что-то в следующих строках:
(require '(clj-time [format :as timef] [coerce :as timec])
(->> "Thu Feb 09 10:38:01 +0000 2012"
(timef/parse (timef/formatter "EEE MMM dd HH:mm:ss Z yyyy"))
timec/to-timestamp)
Возвращенное значение затем может быть передано PostgreSQL через JDBC.
Если вы получаете дату в другом строковом формате и конвертируете ее в это, вы можете пропустить преобразование и предоставить соответствующий форматтер для исходного представления. Есть немало доступных по умолчанию на карте clj-time.format/formatters
, скажем (clj-time.format/show-formatters)
в REPL, чтобы увидеть список с примерами. Кроме того, clj-time.coerce/from-string
пробует все форматированные по умолчанию форматиры в последовательности, возвращающей значение первого последующего синтаксического анализа (nil
, если его нет). Если вы получаете дату как java.util.Date
или long
, см. from-date
и from-long
в том же пространстве имен.
Используйте [clj-time "0.3.6"]
как спецификатор зависимостей в project.clj
, если вы решите использовать clj-time
.
В качестве альтернативы вы можете использовать другой способ разбора строки timestamp в java.sql.Timestamp
; Timestamp
сам может анализировать другое строковое представление:
(java.sql.Timestamp/valueOf "2004-10-19 10:23:54")
clj-time
- самый разумный способ иметь дело с датой и временем в Clojure, тем не менее, поэтому он может стоить вашего времени.