我正在尝试破坏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)
有人能指出我正确的方向吗?
答案 0 :(得分:1)
(ns mastering.stackoverflow
(:import
(java.time ZoneId)))
(.. (jt/instant)
(atZone (ZoneId/systemDefault))
(getYear))
也可以使用其他方法,例如getMonthValue
,getMinute
。
您可以这样“提取”:
(let [i (.. (jt/instant)
(atZone (ZoneId/systemDefault)))
extract (juxt (memfn getYear) (memfn getMinute))]
(extract i))
; => [2018 37]
答案 1 :(得分:1)
我会在没有..
的情况下做到这一点,以明确您正在使用Java互操作(看来clojure.java-time没有包装程序可以将Instant从Invert转换为ZonedDateTime:
(-> (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