Clojure clj-time: разбор локальной строки

У меня проблемы с установлением взаимодействия между java.util.Date и clj-time.

У меня есть первые необработанные данные, которые являются экземпляром java.util.Date, давайте день:

(def date (new java.util.util.Date))

Я хочу превратить в объект clj-time, поэтому я делаю:

(def st-date (.toString date))

Выход:

"Mon Mar 21 16:39:23 CET 2016"

Я определяю форматер

(def date-formatter (tif/formatter "EEE MMM dd HH:mm:ss zzz yyyy"))

Все здесь, я думаю.

Я так стараюсь

(tif/parse order-date-formatter st-date)

У меня есть исключение, которое говорит мне, что формат неправильный.

Я старался

(tif/unparse order-date-formatter (tic/now))

И я имею

"lun. mars 21 15:50:29 UTC 2016"

Который совпадает с датой и строкой Java, но на французском (мой язык) с UTC

Упаковка кода для теста

(defn today-date-to-clj []
  (let [st-date (.toString (new java.util.util.Date))
        date-formatter (tif/formatter "EEE MMM dd HH:mm:ss zzz yyyy")]
    (tif/parse date-formatter st-date)))

Мне кажется, что форматер не работает на строке, потому что это не та же локализация, я прав? Как это изменить?

Спасибо за помощь!

РЕДАКТИРОВАТЬ

Кто-то дал мне гораздо лучший ответ, но это почти сработало для любопытных людей (проблема на "CET 2016", но работает для непонятных)

(def uni-formatter (tif/with-locale (tif/with-zone order-date-formatter (DateTimeZone/forID "Europe/Paris")) java.util.Locale/US))

2 ответа

Решение

Вместо того, чтобы использовать String as an intermediate date representation you should use a direct conversion:

(clj-time.coerce/from-date (java.util.Date.))

Take a closer look at clj-time's coerce functions.

Вы можете передать свой java.util.Date Возражать from-date или же from-date-time чтобы получить org.joda.time.DateTime and then apply it to your custom formatter:

(require '[clj-time
           [coerce :as c]
           [format :as f]])

(->> (java.util.Date.)
     (c/to-date-time)
     (f/unparse date-formatter))
Другие вопросы по тегам