【发布时间】:2020-12-22 12:49:14
【问题描述】:
我使用next.jdbc 库将记录保存到 PostgreSQL 表中。正如您在下面看到的,这些值是一个 LocalDate 实例和一个 Instant 实例。 SQL 列的类型分别为 DATE 和 TIMESTAMPTZ。
需要 next.jdbc.date-time 命名空间从 Java -> SQL 映射,如文档中所述。
{:id 7, :trade_date #object[java.time.LocalDate 0x6b751cb1 2020-12-22], :created_at #object[java.time.Instant 0x3add5e17 2020-12-22T11:41:07.557790Z]}
当我读回记录时(SQL -> Clojure),表示如下
{:id 7, :trade_date #inst "2020-12-21T18:30:00.000-00:00", :created_at #inst "2020-12-22T11:41:07.557790000-00:00"}
所以它们被读回为#inst 文字? 我希望它们作为 java.time 类型返回。另请注意,LocalDate 似乎已转换为 UTC 时间戳。这是我到目前为止挖出的东西..
; inst -> Instant
=> (.toInstant #inst "2020-12-22T11:41:07.557790000-00:00")
#object[java.time.Instant 0x312cc79e "2020-12-22T11:41:07.557Z"]
; inst -> LocalDate
=> (-> #inst "2020-12-21T18:30:00.000-00:00"
#_=> .toInstant
#_=> (ZonedDateTime/ofInstant (ZoneId/of "UTC"))
#_=> (.withZoneSameInstant (ZoneId/systemDefault))
#_=> (.toLocalDate))
#object[java.time.LocalDate 0x44048462 "2020-12-22"]
看起来并不简单/Clojure 方式。有没有更好的办法?
参考资料: 摘自Alan Thompson和Basil Bourque的答案
【问题讨论】:
标签: clojure java-time clojure-next.jdbc