Как можно получить java.time DateTime, используя clojure.java-time из литерала #inst Date? - PullRequest
1 голос
/ 02 мая 2019

Используя clj-time , можно проанализировать литерал #inst Date следующим образом:

(require '[clj-time.coerce :as c])
(c/from-date #inst "2012-12-12")
;; => #object[org.joda.time.DateTime 0x4a251269 "2012-12-12T00:00:00.000Z"]

Как это сделать с помощью новой оболочки java.time clojure.java времени

1 Ответ

1 голос
/ 02 мая 2019

Clojure преобразует каждый литерал #inst в java.util.Date объект.Все, что вам нужно, это встроенный метод .toInstant():

(ns tst.demo.core
  (:use demo.core tupelo.core tupelo.test)
  (:import [java.time ZonedDateTime ZoneId]))

(defn inst->date-time
  "Convert a java.time.Instant to a DateTime for the supplied ZoneId"
  [inst zoneid]
  (.toLocalDate zdt-utc
    (ZonedDateTime/ofInstant instant zoneid)))

(dotest
  (let [may-4    #inst "2018-05-04T01:23:45.678-00:00" ; a java.util.Date
        instant  (.toInstant may-4) ]
    (spyxx may-4)
    (spyx instant)
    (println "utc =>" (inst->date-time instant (ZoneId/of "UTC")))
    (println "nyc =>" (inst->date-time instant (ZoneId/of "America/New_York")))
    ))

с результатом

may-4    => <#java.util.Date #inst "2018-05-04T01:23:45.678-00:00">
instant  => #object[java.time.Instant 0x2207eb9f "2018-05-04T01:23:45.678Z"]
utc      => #object[java.time.LocalDate 0x62b5a16f 2018-05-04]
nyc      => #object[java.time.LocalDate 0x379b6a27 2018-05-03]

Это расширение к j.u.Date было добавлено в Java одновременно с java.time пакет точно для облегчения перехода кода от java.util.Date к java.time.

Обратите внимание, что вы все равно должны быть осторожны, так как выборочный момент дает два разных объекта LocalDate, в зависимости от временииспользуемая зона.


Если вы работаете с пакетом java.time, вас могут заинтересовать некоторые вспомогательные функции , которые я написал. В модульных тестах приведены хорошие примеры как вспомогательных функций, так и взаимодействия с нативными java.time функциями.

Если вы ищете функцию там и не находите ее, естьхороший шанс, что он уже существует в пакете java.time, и его легко использовать напрямую через взаимодействие с Java.java.time - очень хорошо продуманная библиотека (автор предыдущей библиотеки Joda Time).Большинство функций java.time просты и просты в использовании из Clojure, и им не нужна функция обертки.

...