3

これにはJava 7とClojure 1.4を使用しています。

DateOracleDB over を使用して、オブジェクトを含むテーブルの Clojure でいくつかのデータベース テストを作成しています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してもしなくても (true または false を使用しても) 同じ結果が得られます。

回答 (Jon Skeet の厚意による回答へのリンク)

フォーマット文字列で YY を使用していましたが、実際には yy を使用する必要がありました (Y は週の年であり、y は単純な年であるため)。

4

1 に答える 1

6

問題は、yy ではなく YY を使用していることだと思います。のドキュメントから、SimpleDateFormat年ではなく週年YYを参照します。

週年はやや奇妙で、使いたいことがわかっていない限り、おそらく使用しないでしょう。特に、週と年を「月の日」および「月」と混同することは、ほとんど適切ではありません。通常、「年、週、曜日」を一緒に使用します。

別の言い方をすれば、この 2 つのシステムは色の RGB と HSV に少し似ています。あたかも「赤、緑、色相」の形式を定義したかのようですが、あまり意味がありません:)

于 2012-07-18T09:28:36.310 に答える