java - SimpleDateFormat 似乎给出了错误的结果

标签 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 都会得到相同的结果或不(以及真或假)。

答案(由 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/

相关文章:

java - 使用@DataJpaTest 设置自定义方案

java - Shenandoah 2.0 消除转发指针

C 组合日期和时间值

c# - 反序列化客户端 AJAX JSON 日期

emacs - 在 Emacs 中为 Clojure 设置 SLIME 和 Inferior-Lisp

java - 在 tomcat 中使用 j_security_check 自动登录

java - setVisible(false)时JFrame不隐藏

c# - Mysql DB 返回错误的日期格式 (C#)

clojure - #^ 运算符在 Clojure 中是什么意思?

clojure - 我如何使用 Clojure 及其 Web 框架实现类似于 Rails 的 url_for 的功能?