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))