我如何解构一个瞬间并从 java-time 库中提取年、月等
How can I destructure an instant and extract year, month, etc from java-time library
我正在尝试解构一个 instant
并获取年、月、日。
我试过 java-time/as
功能但没有成功。
(ns myproject.time-test
(:require [java-time :as jt])
(:gen-class))
(def curr-time (jt/instant (System/currentTimeMillis)))
(jt/as curr-time :year)
谁能给我指出正确的方向?
(ns mastering.Whosebug
(:import
(java.time ZoneId)))
(.. (jt/instant)
(atZone (ZoneId/systemDefault))
(getYear))
其他方法如getMonthValue
、getMinute
也可用。
你可以这样 "extraction":
(let [i (.. (jt/instant)
(atZone (ZoneId/systemDefault)))
extract (juxt (memfn getYear) (memfn getMinute))]
(extract i))
; => [2018 37]
我会在没有 ..
的情况下这样做,以明确您正在使用 Java 互操作(看起来 clojure.java-time 没有包装器可以从 Instant 转换为分区日期时间:
(-> (jt/instant)
(.atZone (ZoneId/systemDefault)) ; => java ZonedDateTime obj
(.getYear))
=> 2018
还有其他可能有用的方法:
(jt/zoned-date-time) => #object[java.time.ZonedDateTime 0x2585437a
"2018-07-19T11:42:37.093731-07:00[America/Los_Angeles]"]
(jt/year (jt/zoned-date-time)) => #object[java.time.Year 0x74694f06 "2018"]
(jt/year) => #object[java.time.Year 0x16c69c47 "2018"]
还有
(jt/as (jt/zoned-date-time) :year :month-of-year :day-of-month) => (2018 7 19)
另一种将 Instant
转换为 ZonedDateTime
的方法:
(let [zdt (ZonedDateTime/ofInstant (jt/instant) (ZoneId/systemDefault))]
(.getYear zdt) => 2018
(.getMonth zdt) => #object[java.time.Month 0x403d9a5b "JULY"]
(.getDayOfMonth zdt) => 19
我正在尝试解构一个 instant
并获取年、月、日。
我试过 java-time/as
功能但没有成功。
(ns myproject.time-test
(:require [java-time :as jt])
(:gen-class))
(def curr-time (jt/instant (System/currentTimeMillis)))
(jt/as curr-time :year)
谁能给我指出正确的方向?
(ns mastering.Whosebug
(:import
(java.time ZoneId)))
(.. (jt/instant)
(atZone (ZoneId/systemDefault))
(getYear))
其他方法如getMonthValue
、getMinute
也可用。
你可以这样 "extraction":
(let [i (.. (jt/instant)
(atZone (ZoneId/systemDefault)))
extract (juxt (memfn getYear) (memfn getMinute))]
(extract i))
; => [2018 37]
我会在没有 ..
的情况下这样做,以明确您正在使用 Java 互操作(看起来 clojure.java-time 没有包装器可以从 Instant 转换为分区日期时间:
(-> (jt/instant)
(.atZone (ZoneId/systemDefault)) ; => java ZonedDateTime obj
(.getYear))
=> 2018
还有其他可能有用的方法:
(jt/zoned-date-time) => #object[java.time.ZonedDateTime 0x2585437a
"2018-07-19T11:42:37.093731-07:00[America/Los_Angeles]"]
(jt/year (jt/zoned-date-time)) => #object[java.time.Year 0x74694f06 "2018"]
(jt/year) => #object[java.time.Year 0x16c69c47 "2018"]
还有
(jt/as (jt/zoned-date-time) :year :month-of-year :day-of-month) => (2018 7 19)
另一种将 Instant
转换为 ZonedDateTime
的方法:
(let [zdt (ZonedDateTime/ofInstant (jt/instant) (ZoneId/systemDefault))]
(.getYear zdt) => 2018
(.getMonth zdt) => #object[java.time.Month 0x403d9a5b "JULY"]
(.getDayOfMonth zdt) => 19