3

我为此使用 Java 7 和 Clojure 1.4。

我正在 Clojure 中为包含Date对象的表编写一些数据库测试,使用 OracleDB over 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)))

我输入了一些日期,然后得到以下输出..

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 提供回答

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

4

1 回答 1

6

我相信问题在于您使用的是 YY 而不是 yy。从 的文档中SimpleDateFormatYY指的是周年而不是年。

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

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

于 2012-07-18T09:28:36.310 回答