clojure - 你可以使用tick/java.time 将粒度更细的时间类型转换为粒度更细的时间类型吗?
问题描述
我想知道是否有一种方法可以使用tick
(或基于刻度的 java.time)从粒度较小的时间类型转换为粒度更细的时间类型?
这不起作用:
(-> (t/date "2015") (t/date))
;; => No implementation of method: :date of protocol: #'tick.core/IExtraction found
;; => for class: java.time.Year
对我来说,考虑到您基本上是在添加数据,因此可能无法朝这个方向转换是有道理的,因此您必须做出假设,例如选择月份和日期来选择日期。鉴于此,您可以从更多粒度“投射”到更少粒度:
(-> (t/date "2015-01-01") (t/year))
;; => #time/year "2015"
我能想到的唯一方法是通过字符串进行转换:
(->> (t/year "2015")
(t/format (t/formatter "yyyy"))
(#(str % "-01-01"))
(t/date))
;; => #time/date "2015-01-01"
但这感觉有点老套。这样做的正确方法是什么?
解决方案
(require '[clojure.instant :as ci])
(ci/read-instant-timestamp "2015")
=> #inst"2015-01-01T00:00:00.000000000-00:00"
或者
(t/zoned-date-time 2015)
推荐阅读
- sql - 我不能在列中添加具有 2 个相同值的行
- django - Django Admin 不限制对 ManyToMany 字段的选择
- laravel - laravel 护照无法创建令牌
- java - 任务':Main.main()'的执行失败 - IntelliJ Gradle
- javascript - 在网页上的所有 iframe 中注入 iframe 的内容脚本
- node.js - 是否可以从 JSONResponse 中提取一个数组,并循环遍历该数组中的每个项目,在 API URL 的状态变量中使用它?
- c++ - tbb 循环 sysmalloc:断言
- reactjs - 在 React 中获取可选参数
- xcode - 如何在 Xcode 源代码编辑器扩展中获取文件名?
- javascript - 假设添加两个数字的脚本问题