-
Notifications
You must be signed in to change notification settings - Fork 3
/
time.cljc
88 lines (79 loc) · 3.67 KB
/
time.cljc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
(ns luminus-transit.time
(:require
[cognitect.transit :as transit]
#?@(:cljs
[[cljs-time.core :as t]
[cljs-time.format :as tf]
goog.date.Date
goog.date.DateTime
goog.date.UtcDateTime]))
#?(:clj
(:import [java.time
LocalTime
LocalDate
LocalDateTime
ZonedDateTime
YearMonth]
[java.time.format
DateTimeFormatter])))
(def iso-local-time
#?(:clj (DateTimeFormatter/ofPattern "HH:mm:ss.SSS"))
#?(:cljs (tf/formatter "HH:mm:ss.SSS")))
(def iso-local-date
#?(:clj (DateTimeFormatter/ofPattern "yyyy-MM-dd"))
#?(:cljs (tf/formatter "yyyy-MM-dd")))
(def iso-local-date-time
#?(:clj (DateTimeFormatter/ofPattern "yyyy-MM-dd'T'HH:mm:ss.SSS"))
#?(:cljs (tf/formatter "yyyy-MM-dd'T'HH:mm:ss.SSS")))
(def iso-zoned-date-time
#?(:clj (DateTimeFormatter/ofPattern "yyyy-MM-dd'T'HH:mm:ss.SSSXX"))
#?(:cljs (tf/formatter "yyyy-MM-dd'T'HH:mm:ss.SSSZ")))
(def iso-year-month
#?(:clj (DateTimeFormatter/ofPattern "yyyy-MM"))
#?(:cljs (tf/formatter "yyyy-MM")))
#?(:cljs
(def time-deserialization-handlers
{:handlers
{"LocalTime" (transit/read-handler #(tf/parse-local iso-local-time %))
"LocalDate" (transit/read-handler #(tf/parse-local-date iso-local-date %))
"LocalDateTime" (transit/read-handler #(tf/parse-local iso-local-date-time %))
"ZonedDateTime" (transit/read-handler #(tf/parse iso-zoned-date-time %))
"YearMonth" (transit/read-handler #(tf/parse iso-year-month %))}}))
#?(:cljs
(def time-serialization-handlers
{:handlers
{goog.date.Date (transit/write-handler
(constantly "LocalDate")
#(tf/unparse iso-local-date %))
goog.date.DateTime (transit/write-handler
(constantly "LocalDateTime")
#(tf/unparse iso-local-date-time %))
goog.date.UtcDateTime (transit/write-handler
(constantly "ZonedDateTime")
#(tf/unparse iso-zoned-date-time %))}}))
#?(:clj
(def time-deserialization-handlers
{:handlers
{"LocalTime" (transit/read-handler #(java.time.LocalTime/parse % iso-local-time))
"LocalDate" (transit/read-handler #(java.time.LocalDate/parse % iso-local-date))
"LocalDateTime" (transit/read-handler #(java.time.LocalDateTime/parse % iso-local-date-time))
"ZonedDateTime" (transit/read-handler #(java.time.ZonedDateTime/parse % iso-zoned-date-time))
"YearMonth" (transit/read-handler #(java.time.YearMonth/parse % iso-year-month))}}))
#?(:clj
(def time-serialization-handlers
{:handlers
{java.time.LocalTime (transit/write-handler
(constantly "LocalTime")
#(.format ^LocalTime % iso-local-time))
java.time.LocalDate (transit/write-handler
(constantly "LocalDate")
#(.format ^LocalDate % iso-local-date))
java.time.LocalDateTime (transit/write-handler
(constantly "LocalDateTime")
#(.format ^LocalDateTime % iso-local-date-time))
java.time.ZonedDateTime (transit/write-handler
(constantly "ZonedDateTime")
#(.format ^ZonedDateTime % iso-zoned-date-time))
java.time.YearMonth (transit/write-handler
(constantly "YearMonth")
#(.format ^YearMonth % iso-year-month))}}))