clojure - clojure java-time - 日期向前移动一年?
问题描述
我对包装 Java 8 的 java.time api的clojure.java-time库的使用感到困惑。
我想要一个将字符串格式的日期从“yyyy-MM-dd'T'HH:mm:ss”格式转换为“MM/dd/YYYY hh:mm:ss a”格式的函数。
这是我的功能:
(require '[java-time :as jt])
(defn change-ds-format [in-ds]
{:pre [string? in-ds ]}
(let [input-format "yyyy-MM-dd'T'HH:mm:ss"
output-format "MM/dd/YYYY hh:mm:ss a"]
(->> in-ds
(jt/local-date-time input-format)
(jt/format output-format))))
这看起来不错:
(change-ds-format "2019-12-28T00:00:00" )
;=> "12/28/2019 12:00:00 AM"
我不知道为什么要推迟到2020年?
(change-ds-format "2019-12-29T00:00:00" )
;=> "12/29/2020 12:00:00 AM"
;; Why is this one 2020 ???
我想这可能是一个时区偏移问题,但我不相信它应该转移到 2020 年。
解决方案
因为yyyy
不是YYYY
来自DateTimeFormatter 的 Oracle 文档:
... snip...
u year year 2004; 04
y year-of-era year 2004; 04
...snip...
Y week-based-year year 1996; 96
w week-of-week-based-year number 27
...snip...
我对日期时间算术或细微差别不是很精通,但我相信在以周为基础的年份中,今年 12 月 30 日和 31 日计算为 2020 年,因为这些日期属于第 1 周,而不是第 52 周或第 53 周。
推荐阅读
- protocol-buffers - 序列化的 protobuf 文本格式是什么样的?
- powershell - 通过powershell创建的计划任务,运行powershell代码生成错误值:2147942667
- jquery - AJAX MVC 上传图片到数据库
- javascript - JavaScript:抓取每个嵌套对象/仅展平对象的顶层
- google-apps-script - 相同的脚本在 2 个脚本编辑器中的工作方式不同
- mysql - SED 删除两个字符实例之间的所有内容
- ios - WKWebView 按钮图标可用或不使用 javascript
- c++ - 在函数中重载运算符而不编写正文 2 次
- sql - 使用外键连接两个表 - SQL
- windows - 使用活动状态 perl 5.26 从 perl 脚本生成 exe 文件