web-dev-qa-db-ja.com

ClojureでUnixタイムスタンプを取得するにはどうすればよいですか?

現在のタイムスタンプを知りたい。これまで私ができる最善のことは、これを行う自分の関数を定義することです。

(int (/ (.getTime (Java.util.Date.)) 1000))

ClojureでUnixタイムスタンプを取得するための標準関数はありますか?

27
Brad Koch

ほとんどすべてのJVMベースのタイムスタンプメカニズムは、エポックからの時間をミリ秒として測定します。そのため、エポックからの秒数を与える標準**はありません。

関数は次のように少し簡略化できます。

(quot (System/currentTimeMillis) 1000)

** Joda にはこのようなものがあるかもしれませんが、サードパーティのライブラリを取り込むのはやり過ぎのようです。

52
Alex

時間と日付を処理するための標準のClojureライブラリである clj-time を使用します(ラッピング Joda-Time )。はい、これは単純なニーズのための追加の依存関係であり、本当に現在のタイムスタンプだけが必要な場合はやり過ぎになる可能性があります。それでも、事実上無料でニースの便利さです。そして、最終的に追加の時間関連機能が必要になった場合は、すべての基本を適切に実装することで実現できます。

コードについては、現在のリリースのLeiningen依存関係指定子を次に示します。

[clj-time "0.5.1"]

そして、現在のタイムスタンプを取得するためのスニペットは次のとおりです。

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

;; milliseconds since Unix Epoch
(tc/to-long (time/now))

;; also works, as it would with other JVM date and time classes
(tc/to-long (Java.util.Date.))
15
Michał Marczyk