【发布时间】:2020-08-04 14:34:32
【问题描述】:
我想用创建用户后收到的LocalDateTime 签署 jwt 令牌。之后,我需要检查 jwt 是否有效,并且通过从 DB 检索到的日期来实现。
问题是LocalDateTime在创建时包含纳秒,而数据库中的日期没有,然后验证失败。
我尝试通过格式化LocalDateTime 来解决这个问题,以显示没有纳秒的日期,但还有另一个问题。 LocalDateTime 被四舍五入到底(例如 1.222 为 1,1.777 为 1)并且插入 DB 的日期被四舍五入,如 1.222 为 1,1.777 为 2,因此验证再次失败。
我设法通过在我的实体字段中添加@Column(columnDefinition = "TIMESTAMP (6)") 来解决此问题,现在纳秒也存储在数据库中,一切正常,但我不确定这是正确的解决方案。
那么有没有更好的解决方案?我可以以某种方式将 LocalDateTime 舍入与 DB 中相同(并将 db 字段类型保留为 DATETIME 而不是 TIMESTAMP)还是可以将 DB 日期舍入为 LocalDateTime。
我使用的是 Spring Boot 2.2.4
【问题讨论】:
-
哪个数据库提供商?
-
您能否向我们展示您是如何尝试round
LocalDateTime的,甚至可能是您如何解析它或使用如何创建它的? -
我刚刚发现我可以添加
DATETIME(3),这将在数据库中存储毫秒,这样我就可以避免数据库舍入并保留DATETIME字段类型。您如何看待这种方法? -
我在这个link上找到了
LocalDateTIme的四舍五入 -
@CodeScale mysql
标签: java spring-boot localdate