Khi bạn đọc trong một #inst
đen, theo mặc định, một trường hợp java.util.Date
được tạo ra. Chúng có phương thức được xác định cho print-method
(một phương thức đa phương thức chịu trách nhiệm cho các biểu diễn đối tượng được in) trong không gian tên clojure.instant
(đoạn có liên quan của nguồn 1.5.1 là here).
thời gian clj sử dụng loại DateTime
từ thời gian Joda, không có phương pháp tùy chỉnh print-method
được thiết lập. Điều này làm cho tinh thần, kể từ khi có một print-method
trong đó sản xuất một đại diện mà không khứ hồi là hiếm khi mong muốn. Để cho chuyến đi khứ hồi, bạn phải sử dụng trình đọc không chuẩn #inst
. Để đạt được điều đó, nếu bạn đang đọc dữ liệu edn, bạn có thể sử dụng clojure.edn/read
(hoặc read-string
) đi qua người đọc thích hợp trong như tài liệu trong docstring của nó:
(require '[clojure.edn :as edn])
(edn/read {:readers {'inst your-inst-reader}} rdr)
Khi sử dụng CLJ thời gian, your-inst-reader
sẽ giống như #(clj-time.format/parse some-formatter %)
. Sau đó, bạn có thể cung cấp định nghĩa phù hợp với print-method
theo ví dụ về clojure.instant
. (Hoặc bạn chỉ có thể cung cấp định nghĩa print-method
và nhớ rằng bạn sẽ không nhận được vòng quay hoàn hảo; clj-time cung cấp chức năng cưỡng chế rất thuận tiện - xem bên dưới - vì vậy điều này có thể được chấp nhận.)
Hoặc bạn có thể in và đọc java.util.Date
phiên bản và chuyển đổi chúng thành và từ DateTime
s; có chức năng để làm điều đó trong clj-time.coerce
.
Nguồn
2013-07-09 18:11:52
Tôi đang sử dụng clojure 1.5.1, nhập thông tin sau vào REPL '(java.util.Date.)' In '#inst" 2013-07-09T18: 05: 53.231-00: 00 "'. –
Lưu ý rằng 'clj-time.core/now' là một đối tượng DateTime, là Joda. – Jeremy
Ồ, tôi hiểu rồi, sai lầm của tôi. Cảm ơn :). Điều gì về việc chuyển đổi 'DateTime' thành' java.util.Date' và sau đó in nó? –