我正在使用Java 7和Clojure 1.4.
我在Clojure中编写了一些数据库测试,用于包含Date对象的表,使用OracleDB JDBC.
我需要比较我收到的日期(一个Date对象)和String- 所以我可能需要将该字符串转换为一个Date对象.经过一些谷歌搜索,我发现了Java SimpleDateFormat.
这是我使用的(有额外的东西用于调试)
(defn parseDate [date]
(do (debug (str "Parsing date: " date ))
(let [ dateobj (java.text.SimpleDateFormat. "dd-MMM-YY")
parsed (do (. dateobj setLenient false) (. dateobj parse date))]
(debug (str "Result: " parsed)) parsed)))
Run Code Online (Sandbox Code Playgroud)
我扔了一些日期,我得到以下输出..
Parsing date: 01-jan-12
Result: Mon Jan 02 00:00:00 GMT 2012
Parsing date: 01-jan-13
Result: Mon Dec 31 00:00:00 GMT 2012
Parsing date: 00-jan-12
Result: Mon Jan 02 00:00:00 GMT 2012
Parsing date: 02-jan-13
Result: Mon Dec 31 00:00:00 GMT 2012
Run Code Online (Sandbox Code Playgroud)
这根本不对.
Date返回的对象是这样的:例如#<Date Mon Jan 02 00:00:00 GMT 2012>,显然不等于我从数据库中返回的对象#<Date 2012-01-01>.
有没有人对此有任何想法?
注意:无论我是否使用setLenient(并且使用true或false),我都会得到相同的结果.
回答(由Jon Skeet Link提供回答)
我在格式字符串中使用YY,我应该实际使用yy(因为Y是周年,y是简单的年份).
我认为问题在于你使用的是YY而不是yy.从文档来看SimpleDateFormat,YY指的是一周而不是一年.
周年有点奇怪,除非你知道你想要使用它,否则你可能不会.特别是,将周年与"月日"和"月"混合几乎是不合适的.您通常会一起使用"周年,周年,周日".
换句话说:两个系统有点像RGB和HSV的颜色; 就好像你已经定义了一种"红色,绿色,色调"的格式,它没有多大意义:)