【问题标题】:Clojure clj-time : parse local stringClojure clj-time:解析本地字符串
【发布时间】:2016-03-22 00:41:25
【问题描述】:

我无法在 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))

【问题讨论】:

    标签: clojure clj-time


    【解决方案1】:

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

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

    【讨论】:

    • 啊,谢谢,我搜索了一个复杂的答案,没有看到它!
    【解决方案2】:

    仔细查看 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))
    

    【讨论】:

    • 感谢答案!
    猜你喜欢
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    相关资源
    最近更新 更多