我为此使用 Java 7 和 Clojure 1.4。
我正在用 Clojure 为包含 Date
的表编写一些数据库测试对象,在 JDBC
上使用 OracleDB .
我需要将我收到的日期(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)))
我输入了一些日期,我得到了以下输出..
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
这似乎根本不对。
Date
返回的对象是这样的:#<Date Mon Jan 02 00:00:00 GMT 2012>
,这显然不等于我从数据库中返回的值,例如 #<Date 2012-01-01>
.
有没有人对此有任何想法?
注意:无论我使用 setLenient
都会得到相同的结果或不(以及真或假)。
答案(由 Jon Skeet 提供 Link to answer )
我在我的格式字符串中使用了 YY,而实际上我应该使用 yy(因为 Y 是星期年,而 y 是简单的年份)。
最佳答案
我认为问题在于您使用的是 YY 而不是 yy。来自 SimpleDateFormat
的文档, YY
指的是 week-year 而不是年份。
Week-years 有点奇怪,除非您知道您想要使用它,否则您可能不会。特别是,将周年与“月中的某天”和“月”混合使用几乎是不合适的。您通常会一起使用“星期几、一年中的一周、星期几”。
换句话说:这两个系统有点像RGB和HSV的颜色;就好像您已经定义了一种没有多大意义的“红色、绿色、色调”格式:)
关于java - SimpleDateFormat 似乎给出了错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11538161/