【发布时间】:2020-09-01 10:35:31
【问题描述】:
我已经编写了一些类编码解码例程到 json 并返回。这有效,除了一种明确的类型是 Date
没有显示完整的库,这是我的问题
Date now = Date.newInstance()
println "now : $now"
Date reconverted = new SimpleDateFormat('EEE MMM dd HH:mm:ss Z yyyy').parse(now.toString())
println "reconverted : $reconverted"
assert reconverted == now //this assertion fails
如果您查看两者的输出字符串文本,它们是相同的。但是'reconverted'对象不等于'now'对象。
这是由于 Date 中某处的精度丢失造成的吗?我假设重构后的值是相等的。
这只是一个问题,因为如果类有日期字段,我无法断言我的编码/解码类实例是相同的
我的 LocalDateTime 编码/解码没有这个问题,我的解码解析看起来像这样
LocalDateTime.parse (jsonStrValue)
当我检查等价时工作正常
我错过了什么停止这个工作的日期?
【问题讨论】:
-
你实际上已经截断了毫秒。
-
“这是由于 Date 中某处的精度丢失造成的吗?” 是的,原始日期值中的毫秒数已丢失。
-
我建议你不要使用
Date。该课程设计不良且早已过时。而是使用来自java.time, the modern Java date and time API 的Instant。即使没有任何显式格式化程序,它也会解析回一个相等的Instant对象。更多内容my answer here. -
顺便说一句,这种格式对于将日期时间值交换为文本是一个糟糕的选择。了解ISO 8601。
-
java.util.Date类多年前已被java.time.Instant取代。
标签: java groovy decode encode equality