如何解码,然后格式化,标记的 LocalDateTime 值
How to decode, and then format, tagged LocalDateTime value
这是我的 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
;我应该怎么做? 我不知道如何解码标记值。
您可以使用 .-rep
从 TaggedValue
获取值,然后,您可以使用某些库解析 String
。
例如,您可以使用 cljc.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)))]
...]
...)
...
理想情况下,您会直接提供一个处理函数来传输,以便它可以在读取时转换值。首先必须在服务器上完成相同的操作才能创建 TaggedValue。
构建reader时,您可以提供
:handlers {"LocalDateTime" (fn [string-val] (parse-the-timestamp string-val))}
格式化应延迟到需要时进行,但理想情况下 TaggedValue 不应使其脱离读取函数,因为它将您的代码耦合到传输实现。
这是我的 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
;我应该怎么做? 我不知道如何解码标记值。
您可以使用 .-rep
从 TaggedValue
获取值,然后,您可以使用某些库解析 String
。
例如,您可以使用 cljc.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)))]
...]
...)
...
理想情况下,您会直接提供一个处理函数来传输,以便它可以在读取时转换值。首先必须在服务器上完成相同的操作才能创建 TaggedValue。
构建reader时,您可以提供
:handlers {"LocalDateTime" (fn [string-val] (parse-the-timestamp string-val))}
格式化应延迟到需要时进行,但理想情况下 TaggedValue 不应使其脱离读取函数,因为它将您的代码耦合到传输实现。