Clojure - 解析字符串到目前为止

时间:2013-08-08 11:38:58

标签: parsing date clojure format

我正在尝试将包含日期(例如今天=“08082013”​​)的无格式字符串解析为格式“08.08.2013”​​。

这有效: (.parse (java.text.SimpleDateFormat. "ddMMyyyy") today) =&gt; <Date Sun Jan 01 00:00:00 CET 1950>

但是当我(.parse (java.text.SimpleDateFormat. "dd.MM.yyyy") today)时,我收到错误"Unparseable date: "08082013"

为什么呢?如何获得所需的日期格式?

5 个答案:

答案 0 :(得分:12)

要从字符串到日期,请使用解析。

要从日期到字符串,请使用格式。

两者都使用格式化程序来描述转换。

=>(.format
    (java.text.SimpleDateFormat. "dd.MM.yyyy")
    (.parse
      (java.text.SimpleDateFormat. "ddMMyyyy")
      "08082013"))

"08.08.2013"

答案 1 :(得分:4)

如果您正在玩日期和时间,我建议您查看此Clojure库,

https://github.com/clj-time/clj-time

这是大多数Clojure程序员使用的时间,并且基于java lib joda时间,许多人同意比Java内置的更好。

答案 2 :(得分:3)

SimpleDateFormat的.parse方法不会生成字符串,它将读取字符串并生成 java.util.Date对象。如果你想生成一个虚线字符串,你需要带有点的SimpleDateFormat,并在给定java.util.Date的情况下调用.format。

请参阅http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html或查看clj-time

答案 3 :(得分:0)

使用clj-time,您可以使用:

(defn format-date
  [date-str]
  (f/unparse (f/formatter "dd.MM.yyyy") (f/parse custom-formatter date-str)))

(format-date "08082013") ;=> "08.08.2013"

答案 4 :(得分:0)

Clojure基于Java,因此您的许多选择最终都会最终调用Java。据我了解,Java有两个时间api。旧版本位于)__,不建议再使用。新的版本位于java.text.SimpleDateFormat下,并且“更好”。

请记住,您在Clojure中有几种日期处理选项:

  • 您可以直接调用新的或旧的Java函数。 NeilsK的答案提供了有关如何使用旧api执行此操作的示例。在Clojure documentation on java interop的帮助下,您应该能够轻松地使其适应新的java.time api。
  • 每个人都在说使用clj-time,但我不建议您使用它,因为它基于Java库JodaTime,而Java新的时间API推出时,该库已过时。
  • 我个人通过一个名为clojure.java-time的库取得了很多成功,该库是Java新时间api的简单Clojure包装器。
  • juxt/tick看起来非常有前途,因为它试图在Java平台,浏览器和dotnet上以Clojure友好的格式提供新的api。在撰写本文时,它处于Alpha状态,但我会一直关注它。