我想知道當前的時間戳是什麼。我可以做迄今爲止最好的是確定自己的功能,這是否:如何在Clojure中獲得Unix時間戳?
(int (/ (.getTime (java.util.Date.)) 1000))
是否有獲取Unix時間戳使用Clojure的標準功能?
我想知道當前的時間戳是什麼。我可以做迄今爲止最好的是確定自己的功能,這是否:如何在Clojure中獲得Unix時間戳?
(int (/ (.getTime (java.util.Date.)) 1000))
是否有獲取Unix時間戳使用Clojure的標準功能?
幾乎所有基於JVM的時間戳記機制都將時間測量爲自紀元以來的毫秒 - 所以不是,沒有任何標準**,它將自紀元以來給出秒數。
你的功能可以稍微簡化爲:
(quot (System/currentTimeMillis) 1000)
** Joda可能有這樣的事情,但在第三方庫拉這似乎有點小題大做。
謝謝,除了數學清理'(System/currentTimeMillis)'更清晰。 –
我會與clj-time,標準的Clojure庫處理時間和日期(包裝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.))
謝謝,如果你正在做大量的時間計算,絕對是一個很好的解決方案。 –
(defn unix-time-real
"Taken from
System/currentTimeMillis."
[]
(/ (System/currentTimeMillis) 1000))
這將返回一個比率,而你可能需要一個整數。見Alex的答案。 –
不要使用' int:(int(/(.getTimeInMillis(java.util.GregorianCalendar。2038 1 20))1000)); => IllegalArgumentException值超出int:2150258400'的範圍。嘗試使用「quot」,例如'( - >(java.util.Date。).getTime(quot; 1000))'。 –