2011-01-08 41 views
29

Tôi cần đăng nhập một số sự kiện trên một kịch bản Clojure Client-Server, nhưng có vẻ như với tôi rằng Clojure không cung cấp chức năng ngày/giờ. Bất cứ ai có thể xác nhận điều này hoặc tôi đang thiếu một cái gì đó ở đây ?! Nếu tôi đúng thì tôi cần phải sử dụng java interop, phải không?Cách tốt nhất để có được ngày tháng và thời gian ở Clojure là gì?

Trả lời

43

Nếu tất cả bạn cần là để có được thời gian hiện tại và ngày cho logger của bạn, sau đó chức năng này là OK:

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

Bây giờ mà bạn đề cập này, nó sẽ là hữu ích để có hỗ trợ cho các đối tượng ngày bất biến .

+0

Tuyệt vời, tôi nghĩ rằng tôi muốn đi với (print (.getTime (now))) để duy trì độ chính xác hợp lý trong các tệp nhật ký của tôi. Cảm ơn. – Ali

+30

'(defn now [] (java.util.Date.))' Là phiên bản chuẩn. – Rayne

+0

Yay! 42 upvotes: D –

16

Có một số Clojure-wrapper library for Joda-Time. Hoặc bạn sẽ phải sử dụng java interop với Java API chuẩn.

+1

Cảm ơn, nhưng tôi khá giữ phụ thuộc của tôi càng thấp càng tốt. – Ali

+7

@Ali - thư viện thời gian lành mạnh là sự phụ thuộc mà bạn nên cân nhắc kỹ; tiếc là các thư viện chuẩn (cho nhiều ngôn ngữ) không phải lúc nào cũng chính xác. –

9

Với clj-time, thư viện Clojure rằng kết thúc tốt đẹp các thư viện Java Joda Thời gian, bạn có thể sử dụng mã như sau:

(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" 

Một lợi ích của Joda Thời gian (và do đó CLJ-time) là hỗ trợ phiên bản mới thay đổi mới cho múi giờ.

4

Nếu bạn không cần gì nâng cao hơn, chỉ cần sử dụng các lớp Java.

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

12

Java 1.8 thêm gói java.time cốt lõi JDK để làm sạch nhiều frustrations với tình trạng ngày & thời gian trong Java. Kể từ java.time bây giờ là một phần rộng rãi của Java lõi với một API được cải thiện nhiều, tôi sẽ khuyến khích bạn cung cấp cho nó cái nhìn đầu tiên khi viết ngày mới & mã thời gian.

Ví dụ:

(java.time.LocalDateTime/now) 
Các vấn đề liên quan