2011-01-08 6 views
29

Clojure Client-Serverのシナリオでいくつかのイベントを記録する必要がありますが、Clojureは日付/時刻関数を提供していないようです。誰でもこれを確認できますか、私はここに何かを見逃していますか?私は正しい場合、私は、Javaの相互運用機能を使用する必要がありますか?Clojureで日付と時刻を取得する最良の方法は何ですか?

答えて

43

あなたが必要とするすべてはあなたのロガーの現在の時刻と日付を取得する場合、この関数はOKです:

(defn now [] (new java.util.Date)) 

今、あなたはこれを言及していること、不変のDateオブジェクトをサポートしているために有用であろう。 clj-time

+0

素晴らしいですが、私はログファイルの合理的な精度を維持するために(print(.getTime(now)))と一緒に行くと思います。ありがとう。 – Ali

+30

'(defn now [](java.util.Date。))'は標準バージョンです。 – Rayne

+0

Yay! 42 upvotes:D –

16

Clojure-wrapper library for Joda-Timeがあります。または、標準のJava APIでjava interopを使用する必要があります。

+1

おかげで、私はむしろ、可能な限り低い私の依存関係を保ちます。 – Ali

+7

@Ali - 正式な日時ライブラリは、真剣に検討する必要がある依存関係です。残念ながら、(多くの言語の)標準ライブラリは、必ずしも十分に正確ではありません。 –

9

、JavaのジョダタイムライブラリをラップClojureのライブラリは、次のようなコードを使用することができます。ジョダ時間(ひいてはCLJ-時間)の

(require '[clj-time.core :as time]) 
(require '[clj-time.format :as time-format]) 

(time/now) => #<DateTime 2013-03-31T03:23:47.328Z> 

(def time-formatter (time-format/formatters :basic-date-time)) ;; ISO 8601 UTC format 
(time-format/unparse custom-formatter (date-time 2010 10 3)) => "20101003T000000.000Z" 

一つの利点は、新しいリリースのサポートということですタイムゾーンの新しい変更。

4

もっと高度なものは必要ありません。Javaクラスを使用してください。

(.format (java.text.SimpleDateFormat. "MM/dd/yyyy") (new java.util.Date))

12

のJava 1.8は、Javaの日付&時の状態にfrustrationsの多くをクリーンアップするためにコアJDKにjava.timeパッケージを追加しました。 java.timeはコアJavaの幅広く利用可能な部分であり、APIの改善により、新しい日付&のタイムコードを書くときに初めて見てみることをお勧めします。

例:

(java.time.LocalDateTime/now) 
関連する問題