Kiedy odczytano w #inst
dosłowny, domyślnie instancja java.util.Date
jest tworzony. Mają one metodę zdefiniowaną dla print-method
(multimetod odpowiedzialny za drukowane reprezentacje obiektów) w przestrzeni nazw clojure.instant
(odpowiedni fragment źródła 1.5.1 to here).
clj-time używa typu DateTime
od Joda-Time, który nie ma niestandardowej konfiguracji metody print-method
. Ma to sens, ponieważ rzadko kiedy pożądane jest posiadanie reprezentacji, która nie odbywa się w obie strony. Aby mógł się odbyć w obie strony, musisz użyć niestandardowego czytnika #inst
. Aby to osiągnąć, jeśli czytasz dane EDN, można użyć clojure.edn/read
(lub read-string
) uboczny odpowiedniego czytnika w co zostało udokumentowane w docstring:
(require '[clojure.edn :as edn])
(edn/read {:readers {'inst your-inst-reader}} rdr)
Podczas korzystania CLJ wymiarze godzin, your-inst-reader
będzie coś jak #(clj-time.format/parse some-formatter %)
. Następnie można podać pasującą definicję print-method
na przykładzie clojure.instant
. (Możesz też podać definicję print-method
i pamiętać, że nie uzyskasz idealnego okrążenia, clj-time zapewnia bardzo wygodne funkcje koercji - patrz poniżej - więc może być ok.)
Alternatywnie możesz wydrukować i przeczytać instancje java.util.Date
i przekonwertować je na i od DateTime
s; istnieją funkcje do wykonania tego w clj-time.coerce
.
Używam clojure 1.5.1, wprowadzając następujące w REPL '(java.util.Date.) Drukuje' #inst "2013-07-09T18: 05: 53.231-00: 00" '. –
Zauważ, że 'clj-time.core/now' jest obiektem DateTime, którym jest Joda. – Jeremy
O, widzę, mój błąd. Dzięki :). A co z konwersją 'DateTime' na' java.util.Date', a następnie wydrukowanie? –