Clojure clj-time:解析本地字符串

时间:2016-03-21 16:04:58

标签: clojure clj-time

我无法在java.util.Date和clj-time之间建立互操作。

我有第一个原始数据,这是java.util.Date的一个实例,让我们这一天:

res.locals

我想转入clj-time对象,所以我这样做:

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

输出:

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

与java String的日期时间相同,但是使用UTC

的法语(我的语言)

包装测试代码

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

我似乎格式化程序不能对字符串起作用,因为它不是同一个本地化,我是对的吗?如何改变?

感谢您的帮助!

编辑

有人给了我一个更好的答案,但这几乎适用于好奇的人(问题在" CET 2016"但适用于粗糙的人)

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

2 个答案:

答案 0 :(得分:1)

不应使用String作为中间日期表示,而应使用直接转换:

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

答案 1 :(得分:1)

仔细查看clj-time的coerce函数。

您可以将java.util.Date对象传递给from-datefrom-date-time以获取org.joda.time.DateTime,然后将其应用于自定义格式化程序:

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

(->> (java.util.Date.)
     (c/to-date-time)
     (f/unparse date-formatter))