8

日付を含むフォーマットされていない文字列 (たとえば、today = "08082013") をフォーマット "08.08.2013" に解析しようとしています。

これは機能します: (.parse (java.text.SimpleDateFormat. "ddMMyyyy") today) =><Date Sun Jan 01 00:00:00 CET 1950>

しかし(.parse (java.text.SimpleDateFormat. "dd.MM.yyyy") today)、そうするとエラーが発生します"Unparseable date: "08082013"

なんで?目的の日付形式を取得するにはどうすればよいですか?

4

5 に答える 5

4

日付と時刻をいじっている場合は、この Clojure lib をチェックすることをお勧めします。

https://github.com/clj-time/clj-time

これは、ほとんどの Clojure プログラマーが使用する time lib のようなものであり、java lib joda time に基づいており、Java ビルド イン ワンよりも優れていると多くの人が認めています。

于 2013-08-09T10:04:46.060 に答える
3

SimpleDateFormat の .parse メソッドは文字列を生成せず、文字列を読み取って java.util.Date オブジェクトを生成します。ドット付き文字列を生成する場合は、ドットを配置した SimpleDateFormat が必要であり、java.util.Date を指定して .format を呼び出します。

http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.htmlを参照するか、clj-time をご覧ください。

于 2013-08-08T12:11:26.447 に答える
0

clj -timeを使用すると、次のように使用できます。

(defn format-date
  [date-str]
  (f/unparse (f/formatter "dd.MM.yyyy") (f/parse custom-formatter date-str)))

(format-date "08082013") ;=> "08.08.2013"
于 2014-10-31T01:38:18.470 に答える
0

Clojure は Java に基づいているため、オプションの多くは最終的に Java を呼び出すことになります。私が理解しているように、Javaには2つの時間APIがあります。古いものは現在、java.text.SimpleDateFormat推奨されていません。新しいものは下java.timeにあり、「はるかに優れています」。

それを念頭に置いて、Clojure での日付操作にはいくつかのオプションがあります。

  • 新しいまたは古い Java 関数を直接呼び出すことができます。NeilsK's answer は、古い API でこれを行う方法の例を提供します。Java interop に関する Clojure ドキュメントjava.timeの助けを借りて、新しい APIにかなり簡単に適応させることができるはずです。
  • 誰もがclj-timeを使用すると言っていますが、Java の新しい時間 API が登場したときに廃止された JodaTime と呼ばれる Java ライブラリに基づいているため、お勧めしません。
  • 私は個人的に、Java の新しい時間 API 用の単純な Clojure ラッパーであるclojure.java-timeというライブラリーで多くの成功を収めました。
  • juxt/tickは、Java プラットフォームだけでなく、ブラウザーや dotnet でも、新しい API を clojure に適した形式で提供しようとしているため、非常に有望に見えます。この記事の執筆時点ではアルファ版でしたが、今後も注目していきます。
于 2020-06-05T16:03:10.877 に答える