首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从java时间库中解构即时数据并提取年、月等?

如何从java时间库中解构即时数据并提取年、月等?
EN

Stack Overflow用户
提问于 2018-07-20 00:04:12
回答 2查看 1.4K关注 0票数 2

我正在尝试解构一个instant,并得到年、月、日。

我尝试过java-time/as函数,但没有成功。

代码语言:javascript
复制
(ns myproject.time-test
  (:require [java-time :as jt])
  (:gen-class))

(def curr-time (jt/instant (System/currentTimeMillis)))

(jt/as curr-time :year)

有谁能给我指个方向吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-20 02:44:03

我会在没有..的情况下这样做,以表明您正在使用Java interop (似乎clojure.java-time没有从Instant转换为ZonedDateTime的包装器:

代码语言:javascript
复制
(-> (jt/instant)
    (.atZone (ZoneId/systemDefault))  ; => java ZonedDateTime obj
    (.getYear))

 => 2018

还有其他可能有用的方法:

代码语言:javascript
复制
(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"]

而且还

代码语言:javascript
复制
(jt/as (jt/zoned-date-time) :year :month-of-year :day-of-month)   =>   (2018 7 19)

Instant转换为ZonedDateTime的另一种方法

代码语言:javascript
复制
  (let [zdt (ZonedDateTime/ofInstant (jt/instant) (ZoneId/systemDefault))]
    (.getYear zdt)         => 2018
    (.getMonth zdt)        => #object[java.time.Month 0x403d9a5b "JULY"]
    (.getDayOfMonth zdt)   => 19
票数 3
EN

Stack Overflow用户

发布于 2018-07-20 01:09:54

代码语言:javascript
复制
(ns mastering.stackoverflow
    (:import
        (java.time ZoneId)))

    (.. (jt/instant)
            (atZone (ZoneId/systemDefault))
            (getYear))

也可以使用其他方法,如getMonthValuegetMinute

你可以这样做“提取”:

代码语言:javascript
复制
(let [i       (.. (jt/instant)
                (atZone (ZoneId/systemDefault)))
      extract (juxt (memfn getYear) (memfn getMinute))]
    (extract i))

; => [2018 37]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51427279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档