Clojure java时间:使用millis获得即时信息
我试图使用java时间将本地日期转换为带毫秒的瞬间,但instant返回一个不带毫秒的时间戳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
(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
确实是此处使用的正确模式字母。这些文档可能很简洁,并且假设了一些东西,但我相信当你正确阅读它们时,它们已经具备了所有的细节。你遗漏了哪一部分?