Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure java时间:使用millis获得即时信息_Clojure_Java Time - Fatal编程技术网

Clojure java时间:使用millis获得即时信息

Clojure java时间:使用millis获得即时信息,clojure,java-time,Clojure,Java Time,我试图使用java时间将本地日期转换为带毫秒的瞬间,但instant返回一个不带毫秒的时间戳 (def UTC (java-time/zone-id "UTC") (defn local-date-to-instant [local-date] (-> local-date (.atStartOfDay UTC) java-time/instant)) (local-date-to-instant (java-time/local-da

我试图使用java时间将本地日期转换为带毫秒的瞬间,但instant返回一个不带毫秒的时间戳

(def UTC (java-time/zone-id "UTC")

(defn local-date-to-instant [local-date] 
  (-> local-date
      (.atStartOfDay UTC)
      java-time/instant))

(local-date-to-instant (java-time/local-date))
=> #object[java.time.Instant 0xdb3a8c7 "2021-05-13T00:00:00Z"]
但是


下游服务需要以下格式的字符串:
yyyy-MM-ddTHH:MM:ss.SSSZ
LocalDate
没有时间组件<代码>.atStartOfDay在所有时间字段中输入零。
LocalDateTime
可以通过
转换为
即时
<代码>.atStartOfDay
在所有时间字段中输入零。
LocalDateTime
可以通过
.toInstant
转换为
即时
。您需要使用。然后您可以编写如下代码:

LocalDate date = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy MM dd");
String text = date.format(formatter);
请特别注意以下格式模式代码:

S   fraction-of-second  fraction    978
A   milli-of-day        number      1234
n   nano-of-second      number      987654321
我认为
S
代码对您来说是最好的。你需要做一点实验,因为文档中没有所有的细节

以下是一个例子:

(ns tst.demo.core
  (:use tupelo.core tupelo.test)
  (:require
    [schema.core :as s]
    [tupelo.java-time :as tjt]
  )
  (:import
    [java.time Instant LocalDate LocalDateTime ZonedDateTime]
    [java.time.format DateTimeFormatter]
  ))

(dotest
  (let [top-of-hour (tjt/trunc-to-hour (ZonedDateTime/now))
        fmt         (DateTimeFormatter/ofPattern "yyyy-MM-dd HH:mm:ss.SSS")
       ]
    (spyx top-of-hour)
    (spyx (.format top-of-hour fmt))
  ))
结果

-----------------------------------
   Clojure 1.10.3    Java 15.0.2
-----------------------------------

Testing tst.demo.core
top-of-hour => #object[java.time.ZonedDateTime 0x9b64076 "2021-05-13T07:00-07:00[America/Los_Angeles]"]
(.format top-of-hour fmt) => "2021-05-13 07:00:00.000"
以上内容基于和库。

您需要使用。然后您可以编写如下代码:

LocalDate date = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy MM dd");
String text = date.format(formatter);
请特别注意以下格式模式代码:

S   fraction-of-second  fraction    978
A   milli-of-day        number      1234
n   nano-of-second      number      987654321
我认为
S
代码对您来说是最好的。你需要做一点实验,因为文档中没有所有的细节

以下是一个例子:

(ns tst.demo.core
  (:use tupelo.core tupelo.test)
  (:require
    [schema.core :as s]
    [tupelo.java-time :as tjt]
  )
  (:import
    [java.time Instant LocalDate LocalDateTime ZonedDateTime]
    [java.time.format DateTimeFormatter]
  ))

(dotest
  (let [top-of-hour (tjt/trunc-to-hour (ZonedDateTime/now))
        fmt         (DateTimeFormatter/ofPattern "yyyy-MM-dd HH:mm:ss.SSS")
       ]
    (spyx top-of-hour)
    (spyx (.format top-of-hour fmt))
  ))
结果

-----------------------------------
   Clojure 1.10.3    Java 15.0.2
-----------------------------------

Testing tst.demo.core
top-of-hour => #object[java.time.ZonedDateTime 0x9b64076 "2021-05-13T07:00-07:00[America/Los_Angeles]"]
(.format top-of-hour fmt) => "2021-05-13 07:00:00.000"

以上内容基于和库。

创建一个
DateTimeFormatter
,它以毫秒(3个小数位数)打印ISO瞬间,即使它们是零:

(ns steffan.overflow)
(:require[java时间:作为jt])
(:导入(java.time.format DateTimeFormatterBuilder)))
(def iso即时ms格式化程序
(>(DateTimeFormatterBuilder.)(.appendInstant 3.toFormatter))
使用示例:

(def今日安装(jt/截断为(jt/即时):天))
(本月的今天)“2021-05-13T00:00:00Z”
(jt/format iso instant ms formatter today inst);=>“2021-05-13T00:00:00.000Z”

创建一个
DateTimeFormatter
,它以毫秒(3个小数位数)打印ISO瞬间,即使它们是零:

(ns steffan.overflow)
(:require[java时间:作为jt])
(:导入(java.time.format DateTimeFormatterBuilder)))
(def iso即时ms格式化程序
(>(DateTimeFormatterBuilder.)(.appendInstant 3.toFormatter))
使用示例:

(def今日安装(jt/截断为(jt/即时):天))
(本月的今天)“2021-05-13T00:00:00Z”
(jt/format iso instant ms formatter today inst);=>“2021-05-13T00:00:00.000Z”

您是否需要分数始终在后面的
.toString()
中?因为如果为零,默认打印机/toString将不会输出(请参阅)。这是正确的,服务下游需要一个以下格式的字符串:yyyy-MM-ddTHH:MM:ss.sssz,那么您必须使用自己的格式化程序。请参阅(关于格式化程序字符串的公认答案或问题的第一条注释-java时间更容易的内容)@Neikon您确定这是一项要求吗?格式为,并且根据该标准,秒的分数为零时是可选的。您是否需要分数始终在那里以备以后使用
.toString()
?因为如果为零,默认打印机/toString将不会输出(请参阅)。这是正确的,服务下游需要一个以下格式的字符串:yyyy-MM-ddTHH:MM:ss.sssz,那么您必须使用自己的格式化程序。请参阅(关于格式化程序字符串的公认答案或问题的第一条注释-java时间更容易的内容)@Neikon您确定这是一项要求吗?格式是,根据该标准,秒的分数为零时是可选的。大写字母
S
确实是此处使用的正确模式字母。这些文档可能很简洁,并且假设了一些东西,但我相信当你正确阅读它们时,它们已经具备了所有的细节。您遗漏了哪一部分?大写字母
S
确实是此处使用的正确模式字母。这些文档可能很简洁,并且假设了一些东西,但我相信当你正确阅读它们时,它们已经具备了所有的细节。你遗漏了哪一部分?