Определите формат даты по локали с помощью clj-time

Я искал это уже довольно давно через Google, и я не мог найти окончательное решение с clj-time. Я хочу автоматически форматировать дату в соответствии с локалью, как в этот пример или здесь. Как бы я сделал это, используя clj-time?

Спасибо и ура


person RaceCondition    schedule 08.09.2014    source источник


Ответы (1)


Используйте with-locale (http://clj-time.github.io/clj-time/doc/clj-time.format.html#var-with-locale)

(require '[clj-time.core :as time] '[clj-time.format :as fmt])
(import '[java.util Locale])

(def custom-formatter (fmt/formatters :rfc822))
(def ja-formatter (fmt/with-locale custom-formatter (Locale. "ja")))
(fmt/unparse ja-formatter (time/date-time 2010 10 3))
> "日, 03 10 2010 00:00:00 +0000"

-ОБНОВИТЬ-

Пример использования joda-time DateTimeFormat:

(require '[clj-time.core :as time] '[clj-time.format :as fmt])
(import '[java.util Locale])
(import '[org.joda.time.format DateTimeFormat])
(def custom-formatter (DateTimeFormat/longDate))
(def ja-formatter (fmt/with-locale custom-formatter (Locale. "ja")))
(fmt/unparse ja-formatter (time/date-time 2010 10 3))
"2010/10/03"
(def us-formatter (fmt/with-locale custom-formatter (Locale. "us")))
(fmt/unparse us-formatter (time/date-time 2010 10 3))
"October 3, 2010"
person edbond    schedule 08.09.2014
comment
Я попробовал это, и это работает с rfc822, но что, если мне нужен формат понедельника, 29 октября 2014 г. и соответствующие форматы в Корее, Китае, Германии и т. д.? На данный момент я выбрал это решение: (.format (SimpleDateFormat/getDateInstance 0 (Locale/US) (t.coerce/to-date clj-time-date)) - и это дает мне правильно отформатированные даты для разных языков. - person RaceCondition; 08.09.2014
comment
вы можете создать DateTimeFormat из Joda, поскольку clj-time является оболочкой для joda-time. joda-time.sourceforge.net/apidocs/org/ Джода/время/формат/ - person edbond; 08.09.2014