Clojure parse不接受所有月份名称缩写
对于给定的自定义格式化程序,parse拒绝某些月值Clojure parse不接受所有月份名称缩写,clojure,jodatime,clj-time,Clojure,Jodatime,Clj Time,对于给定的自定义格式化程序,parse拒绝某些月值 (require '[clj-time.core :as t] '[clj-time.format :as f]) (let [custom-formatter (f/formatter "dd MMM yyyy")] (f/parse custom-formatter "27 mar 2010") (f/parse custom-formatter "27 dec 2010")) 第一个语法分析器返回预期的结果object[o
(require '[clj-time.core :as t]
'[clj-time.format :as f])
(let [custom-formatter (f/formatter "dd MMM yyyy")]
(f/parse custom-formatter "27 mar 2010")
(f/parse custom-formatter "27 dec 2010"))
第一个语法分析器返回预期的结果object[org.joda.time.DateTime 0x62a9d176 2010-03-27T00:00:00.000Z],而第二个语法分析器返回实际值:java.lang.IllegalArgumentException:无效格式:2010年12月27日格式不正确
我无法理解这种行为。什么可能导致这个问题
谢谢你的帮助
更新
这是我的project.cljfile
您可能需要为格式化程序指定区域设置。您可以通过以下选项查看默认区域设置:
user=> (java.util.Locale/getDefault)
#object[java.util.Locale 0x4713d9a5 "en_US"]
查看不同地区的结果,包括您看到的错误:
user=> (require '[clj-time.core :as t]
#_=> '[clj-time.format :as f])
nil
user=> (let [custom-formatter (f/with-locale
(f/formatter "dd MMM yyyy")
java.util.Locale/ENGLISH)]
(f/parse custom-formatter "27 mar 2010"))
#object[org.joda.time.DateTime 0x3cfceae6 "2010-03-27T00:00:00.000Z"]
user=> (let [custom-formatter (f/with-locale
(f/formatter "dd MMM yyyy")
java.util.Locale/ITALY)]
(f/parse custom-formatter "27 mar 2010"))
#object[org.joda.time.DateTime 0x4f5e9955 "2010-03-27T00:00:00.000Z"]
user=> (let [custom-formatter (f/with-locale
(f/formatter "dd MMM yyyy")
java.util.Locale/CHINA)]
(f/parse custom-formatter "27 mar 2010"))
IllegalArgumentException Invalid format: "27 mar 2010" is malformed at "mar 2010" org.joda.time.format.DateTimeFormatter.parseDateTime (DateTimeFormatter.java:899)
您可能需要为格式化程序指定区域设置。您可以通过以下选项查看默认区域设置:
user=> (java.util.Locale/getDefault)
#object[java.util.Locale 0x4713d9a5 "en_US"]
查看不同地区的结果,包括您看到的错误:
user=> (require '[clj-time.core :as t]
#_=> '[clj-time.format :as f])
nil
user=> (let [custom-formatter (f/with-locale
(f/formatter "dd MMM yyyy")
java.util.Locale/ENGLISH)]
(f/parse custom-formatter "27 mar 2010"))
#object[org.joda.time.DateTime 0x3cfceae6 "2010-03-27T00:00:00.000Z"]
user=> (let [custom-formatter (f/with-locale
(f/formatter "dd MMM yyyy")
java.util.Locale/ITALY)]
(f/parse custom-formatter "27 mar 2010"))
#object[org.joda.time.DateTime 0x4f5e9955 "2010-03-27T00:00:00.000Z"]
user=> (let [custom-formatter (f/with-locale
(f/formatter "dd MMM yyyy")
java.util.Locale/CHINA)]
(f/parse custom-formatter "27 mar 2010"))
IllegalArgumentException Invalid format: "27 mar 2010" is malformed at "mar 2010" org.joda.time.format.DateTimeFormatter.parseDateTime (DateTimeFormatter.java:899)
产生的错误似乎与您发布的示例无关。看起来您正在尝试解析2010年10月27日的内容,其中有一个额外的空格。@kongeor您是对的。我的复制/粘贴搞砸了。现在,我已经更新了我的帖子。我描述的错误确实是在正确的格式下发生的。奇怪。你的代码对我有用。请注意,您有一个额外的右括号。如果将此代码示例放入REPL,它会中断吗?您正在使用哪个版本?是的,它在REPL中也会中断。我已经提供了我使用的依赖项。你能在这个环境中运行测试吗?这是您列出的两个示例。产生的错误似乎与您发布的示例无关。看起来您正在尝试解析2010年10月27日的内容,其中有一个额外的空格。@kongeor您是对的。我的复制/粘贴搞砸了。现在,我已经更新了我的帖子。我描述的错误确实是在正确的格式下发生的。奇怪。你的代码对我有用。请注意,您有一个额外的右括号。如果将此代码示例放入REPL,它会中断吗?您正在使用哪个版本?是的,它在REPL中也会中断。我已经提供了我使用的依赖项。你能在这个环境中运行测试吗?以下是您列出的两个示例。