我正在尝试将包含日期(例如今天=“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"
为什么呢?如何获得所需的日期格式?
答案 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.time
api。