日期出错---swagger输出与数据库不一致

本人在项目中发现,Debug得到的日期返回值和最后输出swagger的日期值不一致,万思不得其解,最后发现我用的是java.sql.Date,改为java.util.Date就OK了.

日期出错

先还原一下出错场景:

import java.sql.Date;

@ApiModel(value = "记录出参VO")
@Data
public class SurgeryNursingVO {

    @ApiModelProperty(value = "项目时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date dates;

}

数据库数据是 :2020-12-15 18:02:33
Debug返回的数据也是次数据。
而swagger 输出却是:2020-12-14 16:00:00
!!!!!!这就奇怪了。

我就试一下,代码改了:

import java.util.Date;

最后输出:2020-12-15 18:02:33
和数据库一样了!!!!!

那我们来看一下这两个Date的区别

java.util.Date和java.sql.Date的区别

java.util.Date是在除了SQL语句的情况下面使用的。
java.sql.Date是针对SQL语句使用的,它只包含日期而没有时间部分
它们都有getTime方法返回毫秒数,自然就可以直接构建。
在这里插入图片描述

java.util.Date 是 java.sql.Date 的父类,前者是常用的表示时间的类,我们通常格式化或者得到当前时间都是用他,后者之后在读写数据库的时候用他,因为PreparedStament的setDate()的第2参数和ResultSet的getDate()方法的第2个参数都是java.sql.Date。
在这里插入图片描述

详细查看java.sql.Date类:

一个包装了毫秒值的瘦包装器 (thin wrapper),它允许 JDBC 将毫秒值标识为 SQL DATE 值。毫秒值表示自 1970 年 1 月 1 日 00:00:00 GMT 以来经过的毫秒数。

为了与 SQL DATE 的定义一致,由 java.sql.Date 实例包装的毫秒值必须通过将小时、分钟、秒和毫秒设置为与该实例相关的特定时区中的零来“规范化”。

“规范化”的java.sql.Date只包含年月日信息,时分秒毫秒都会清零。格式类似:YYYY-MM-DD。当我们调用ResultSet的getDate()方法来获得返回值时,java程序会参照"规范"的java.sql.Date来格式化数据库中的数值。因此,如果数据库中存在的非规范化部分的信息将会被截取

也就是说,如果你是 2017-09-17 15:15:25 这样的时间点存取数据,那么存在数据库中的值就是:2017-09-17 00:00:00

swagger输出与数据库不一致

    @ApiModelProperty(value = "生日日期")
    @JsonFormat(pattern="yyyy-MM-dd")
    private Date birthDate;

此时就不是swagger的原因了,而是@JsonFormat的问题了
改为

    @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")

就OK了,前后时间就一致了。

java.util.Date和java.sql.Date的区别和相互转化
java.sql.Date和java.util.Date区别及使用
Swagger – 解决日期不正确(示例代码)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值