Как конвертировать A Clojure/Java Date в упрощенную форму

Я хочу взять

(str (Date.))
"Thu Feb 07 12:15:03 EST 2013"

и превратить его в строку, поэтому его можно ввести в поле даты Informix mm/dd/yyyy.

02/07/2013

Я смотрю на разные должности, без успеха. Здесь первое, что я нашел, и попытался, зная, что мне придется изменить порядок формата даты. Я просто хотел заставить его работать.

(defn str-to-date [date] (. (SimpleDateFormat. "yyyy-MM-dd") parse date))

Я получаю эту ошибку

(str-to-date (str (Date.)))
ParseException Unparseable date: 
"Thu Feb 07 12:44:41 EST 2013"  java.text.DateFormat.parse (DateFormat.java:354)

Я также пробовал это

 (.parse (SimpleDateFormat. "mm/DD/yyyy") (str (Date.)))
ParseException Unparseable date: 
"Thu Feb 07 12:42:02 EST 2013"  java.text.DateFormat.parse (DateFormat.java:354)

без успеха. Любые указатели документации или ответы будут оценены.

Ответ 1

(def date (java.util.Date.))
date 
=> #inst "2013-02-07T19:08:12.107-00:00"

Вы можете напрямую форматировать в желаемый формат

(.format (java.text.SimpleDateFormat. "MM/dd/yyyy") date)
=> "02/07/2013"

Но если начинать с строки,

(str date)
=> "Thu Feb 07 13:08:12 CST 2013"

вы должны сначала проанализировать этот формат строки

(def df (java.text.SimpleDateFormat. "EEE MMM d HH:mm:ss zzz yyyy"))
(.parse df (str date))
=> #inst "2013-02-07T19:08:12.107-00:00"

а затем обратно в нужный формат

(.format (java.text.SimpleDateFormat. "MM/dd/yyyy") (.parse df (str date)))
=> "02/07/2013"

Вы также можете посмотреть в библиотеку времени и даты: Какие библиотеки времени и даты Clojure?.

Ответ 2

.parse принимает строку в формате, указанном в конструкторе SimpleDateFormat, и превращает его в объект Date. Если вы можете просто передать дату, используйте .format, передавая ей дату для форматирования. Если вам нужно передать строку, вам понадобится 2 SimpleDateFormats. Один для формата ввода и один для выходного формата. Вызовите .parse, используя формат ввода и .format, используя выходной формат.