SimpleDateFormat似乎给出了错误的结果

时间:2012-07-18 09:22:43

标签: java date clojure

我正在使用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(以及使用true或false),我都会得到相同的结果。

回答(由Jon Skeet提供Link to answer

我在格式字符串中使用YY,我应该实际使用yy(因为Y是周年,y是简单的年份)。

1 个答案:

答案 0 :(得分:6)

我认为问题在于你使用的是YY而不是yy。从SimpleDateFormat的文档中,YY指的是周年而不是年份。

周年有些奇怪,除非你知道你想要使用它,否则你可能不会。特别是,将周年与“月日”和“月”混合几乎是不合适的。您通常会一起使用“周 - 年,周年,星期几”。

换句话说:两个系统有点像RGB和HSV的颜色;这就好像你已经定义了一种“红色,绿色,色调”的格式,这没有多大意义:)