首页 > 其他分享 >接收Date为什么多出了HH:mm:ss?

接收Date为什么多出了HH:mm:ss?

时间:2022-09-29 17:58:10浏览次数:46  
标签:java String mm dd private yyyy ss HH Date

json传入标准格式的 yyyy-MM-dd ,想让其展示成 2022-09-29,而程序好像和我作对,总是输出 2022-09-29 08:00:00.0。

问题描述:

请求体:

{
  "transId": "20",
  "origin": "adipisicing Lorem eu",
  "destination": "culpa exercitation sint dolor",
  "departureDate": "2022-09-29",
  "num": 11
}

DTO:

@Data
public class TicketRequest extends BaseRequest{
    private String transId;
    private String ticketId;
    private String origin;
    private String destination;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date departureDate;
    private int num;
}

Controller:

@PostMapping("/query")
public BaseResponse queryTicket(@RequestBody TicketRequest request){
    return ticketServer.queryTicket(request);
}

 

请求体 -> DTO -> Controller, 使用了@RequestBody 接收post 请求体 body 中的 json 数据。 并且使用了@DateTimeFormat(pattern = "yyyy-MM-dd") 注解格式化请求参数。

按我的理解此时反序列化后的 departureDate 参数的格式应该是 yyyy-MM-dd 。可实际上却不是这样,实际结果如下。

反序列化后的请求参数:

问题解决:

DTO层,import java.util.Date; -> import java.sql.Date;

//import java.util.Date;
import java.sql.Date;
@Data
public class TicketRequest extends BaseRequest{
    private String transId;
    private String ticketId;
    private String origin;
    private String destination;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date departureDate;
    private int num;
}

替换掉 java.util.Date 后,当前端传入 yyyy-MM-dd 格式的数据时,此时不会再 多一个 08:00:00.0 了。

甚至这时候我可以把 @DateTimeFormat(pattern = "yyyy-MM-dd") 去掉。

//import java.util.Date;
import java.sql.Date;
@Data
public class TicketRequest extends BaseRequest{
    private String transId;
    private String ticketId;
    private String origin;
    private String destination;
    private Date departureDate;
    private int num;
}

问题反思:

问题解决后不禁一声叹息,问了自己几个问题。

  1. 我为什么要加上@DateTimeFormat(pattern = "yyyy-MM-dd"),它的作用到底是什么?
  2. import java.util.Date; 和 import java.sql.Date;到底有什么不一样?
  3. 数据类型和数据之间的关系我真的理解了吗?

我为什么要加上@DateTimeFormat(pattern = "yyyy-MM-dd"),它的作用到底是什么?

答:

  1. 为什么我要加上这个注解?

遇到问题后,反手就是CV Google. 看到有答案贴了 @DateTimeFormat(pattern = "yyyy-MM-dd"),就觉得这个注解可以让参数按照 yyyy-MM-dd 格式化能去掉08:00:00.0。

  1. 这个注解的作用到底是什么

上面是spring文档。我的理解 @DateTimeFormat 只是一个约束,参数必须是 pattern 指定的格式。

import java.util.Date; 和 import java.sql.Date;到底有什么不一样?

答:

  1. java.sql.Date 是 java.util.Date 的子类。

2. java.sql.Date 和 java.util.Date 的时间精度不一样。

java.sql.Date 的时间精度是 年月日,java.util.Date 的时间精度是年月日时分秒。下面我贴一下部分代码java.sql.Date,java.util.Date 代码太多就不贴了。

java.sql.Date:

 

  1. 数据类型和数据之间的关系我真的理解了吗?

答:如果真的理解数据类型和数据之间的关系。思考这个问题时的角度会不一样。可能会先思考Date数据类型的默认精度为年月日时分秒,参数只传入年月日,所以自动补齐了时分秒。这个时候要解决问题,就需要修改数据类型。

标签:java,String,mm,dd,private,yyyy,ss,HH,Date
From: https://www.cnblogs.com/alan98/p/16742438.html

相关文章

  • 外网ssh远程连接linux服务【内网穿透】
    在没有公网IP的情况下,要实现外网ssh远程linux服务,普遍是做内网穿透,在本地安装个客户端就可以。现在市面上内网穿透软件很多,不乏好坏。这里推荐一款挺好用的内网穿透软件—......
  • Delphi XE MessageDlg[2] TMsgDlgType、TMsgDlgBtn用法示例1
    DelphiXEMessageDlg[2]TMsgDlgType、TMsgDlgBtn用法示例11、TMsgDlgType //滔Roy2022.09.29MessageDlg('测试mtInformation.',TMsgDlgType.mtInformation,[TMs......
  • 使用process.env.NODE_ENV的正确姿势
    什么是process.env.NODE_ENVprocess.env.NODE_ENV应该是我们最熟悉的环境变量了,它经常出现在使用框架或者类库的时候,被用来区分不同的环境(开发,测试,生产等),以便我们进行相......
  • Warning: Please use `require(“history“).createHashHistory` instead of `require
    问题解决方案1、找到node_modules=>dva=>lib=>index.js2、找到require("history/createHashHistory")3、替换use`require("history").createHashHistory`insteadof`requ......
  • css 左侧固定右侧自适应(7种)
    ​​演示demo​​​其中有老生常谈的​​float​​方法,BFC方法,也有CSS3的​​flex​​布局与​​grid​​布局。常用的宽度自适应的方法通常是利用了​​block​​水平的......
  • 多进程multiprocessing
    多进程实现简易版的抢票工具实现:多个进程共享同一文件,把文件当数据库,用多个进程模拟多个人执行抢票任务关键词:多进程,锁1)多进程importjsonimportosimporttimefro......
  • 使用animate.css增加动效
    给网页增加一些动效会使得网页更加地生动。animate.css封装了一个动画库,可直接使用封装好的动画效果。其链接为:​​https://daneden.github.io/animate.css/​​ 我们可以......
  • k8s网络-ingress
    一、方案:以daemonSet方式部署ingress-nginx-controller在k8s各节点上,并基于主机网络。二、部署参考:https://kubernetes.github.io/ingress-nginx/deploy/https://githu......
  • 讲讲什么是 JMM
    本文约7300字,完整阅读大概会花费你「15分钟」左右的时间  什么是JMM?JMM就是Java内存模型(javamemorymodel)。 JMM是一个抽象的概念,并不像JVM内存结构一......
  • WINFORM DEVEXPRESS插件常用功能总结
    前言DevExpress 控件的功能比较强大,是全球知名控件开发公司,对于开发 B/S 或 C/S 都非常出色,可以实现很炫且功能强大的效果。DevExpressWinform 常用控件是本人在......