Как декодировать, а затем отформатировать теговое значение LocalDateTime - PullRequest
2 голосов
/ 16 января 2020

Это моя функция Clojurescript ,

(defn message-list [messages]
  (println messages) ;; stmt#1
  [:ul.messages
   (for [{:keys [timestamp message name]} @messages]
     ^{:key timestamp}
     [:li
      [:time (.toLocaleString timestamp)] ;; stmt#2
      [:p message]
      [:p " - " name]])])

stmt#1 печатает,

#<Atom: [{:id 1, :name Adeel Ansari, :message Hello, from the other side., 
          :timestamp #object[Transit$TaggedValue [TaggedValue: LocalDateTime, 2020-01-13T18:19:50.552]]}]>

и stmt#2 печатает,

[TaggedValue: LocalDateTime, 2020-01-13T18:19:50.552]

Теперь я хотел бы напечатать его, скажем, 13/01/2020 18:19; как я должен go об этом? Я понятия не имею, как декодировать значения тегов.

Ответы [ 2 ]

4 голосов
/ 16 января 2020

Вы можете получить значение из TaggedValue, используя .-rep, а затем вы можете проанализировать это String, используя некоторую библиотеку.

Например, вы можете проанализировать дату, используя clj c. java -time , например:

(let [tv (t/tagged-value "LocalDateTime" "2019-01-01T11:22:33.123")]
    (cljc.java-time.local-date-time/parse (.-rep tv))) => #object[LocalDateTime 2019-01-01T11:22:33.123]

Или вы можете использовать Tick ; тогда ваш код будет выглядеть примерно так:

(ns xx.yy.zz
  (:require ..
            [tick.locale-en-us]
            [tick.alpha.api :as t]
            ..
            ))
...
  (defn message-list [messages]
    ...
       [:li
        [:time (t/format (t/formatter "dd/MM/yyyy HH:mm") (t/parse (.-rep timestamp)))]   
        ...]
    ...)
...
2 голосов
/ 17 января 2020

В идеале вы бы предоставили функцию-обработчик для прямой передачи, чтобы она могла преобразовывать значение во время чтения. То же самое должно быть сделано на сервере для создания TaggedValue.

При создании reader вы можете указать

:handlers {"LocalDateTime" (fn [string-val] (parse-the-timestamp string-val))}

Форматирование должно быть задерживается до необходимости, но в идеале TaggedValue не должен выделяться из функции чтения, поскольку он связывает ваш код с транзитной реализацией.

...