mysql中返回日期格式带有T、Java解决返回日期格式带 ‘T‘ 问题、MySQL查询 ...

打印 上一主题 下一主题

主题 985|帖子 985|积分 2955

以下内容基于mysql8.0进行解说
一、场景描述:Mysql返回日期格式带有T

在springboot项目中,mysql数据库日期类型datetime、timestamp类型的日期字段,查询时返回的JSON相应报文中带有T.
(1)Springboot返回相应JSON报文如下
  1. {
  2.     "id": 1,
  3.     "createTime": "2024-06-18T08:54:41.000+00:00",
  4.     "updateTime": "2024-06-18T08:54:41.000+00:00"
  5. }
复制代码

(2)数据库表数据如下
  1. create table test
  2. (
  3.         ID int auto_increment comment 'id' primary key,
  4.         CREATE_TIME datetime null comment '创建时间',
  5.         UPDATE_TIME timestamp null comment '更新时间'
  6. )
  7. comment '测试表';
  8. insert into test values (null,now(),now());
复制代码

(3)springboot项目代码如下

二、解决方法

2.1、方法一:通过注解格式化

可以在日期类型属性上,或者 GET 方法加上 Jackson 的 @JsonFormat 注解方式来格式化,比方:
  1. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
  2. private Date updateTime;
复制代码
留意: 肯定要在最外层Controller层中的相应实体上添加@JsonFormat 注解,否则不见效。

效果:

2.2、方法二:通过全局配置

  1. @Configuration
  2. public class WebMvcConfig {
  3.     @Bean
  4.     MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
  5.         MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
  6.         ObjectMapper mapper = new ObjectMapper();
  7.         mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
  8.         converter.setObjectMapper(mapper);
  9.         return converter;
  10.     }
  11. }
复制代码
2.3、方法三:查询时手动转换时间格式

(1):mapper.xml文件中使用DATE_FORMAT手动转换文件
  1. <select id="listAll" resultType="com.demo.entity.vo.TestVo">
  2.     select id,DATE_FORMAT(create_time, '%Y-%m-%d %H:%i:%s') create_time ,
  3.            DATE_FORMAT(update_time, '%Y-%m-%d %H:%i:%s') update_time
  4.     from test
  5.   </select>
复制代码
(2):相应实体中用String类型进行吸收

三、mysql 数据库时间类型数据为什么有T

在MySQL数据库中,日期和时间类型的数据被存储为特定的格式。当从数据库中查询日期时,有时会发现日期值带有字母"T",比方"2021-01-01T12:00:00"。这是由于MySQL遵循ISO 8601标准,在日期和时间之间使用"T"作为分隔符。
3.1、什么是ISO 8601格式

ISO 8601是国际标准化组织(ISO)发布的日期和时间的表示方法的标准。在ISO 8601中,日期和时间被表示为一个带有"T"的字符串,如"2022-01-01T12:00:00"。这种格式的好处是统一和标准化,便于不同系统之间的数据互换和比较。
   日期和时间的组合表示法编辑:
  

  • 归并表示时,要在时间前面加一大写字母T,如要表示北京时间2021年3月31日上午7点30分8秒,可以写成2021-03-31T7:30:08,以是这个T date和time归并表示时,中间加个T。
  iso 8601详情查看:https://baike.baidu.com/item/ISO%208601/3910715?fr=ge_ala
  四、java中日期格式带T

我一直有个疑问,前面我们讲mysql中datetime、Timestamp类型返回的Date类型会带T, 那么java本身的java.util.Date类本身会带T么?
(1)案例

(2)效果
可以发现在相应报文中,new Date()也是带有T的。


(3)结论
只要java中返回对象是java.util.Date, 默认都会带T, 不但仅是由于mysql数据库字段类型为datetime、timestamp
4.1、疑问:为什么java.util.Date类型返回时带T

   有个疑问,我们直接在程序中打印new Date()的时间显示的是Wed Jun 19 09:05:56 CST 2024样式,为什么在相应JSON中转换成了2024-06-19T01:48:07.337+00:00格式

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用户国营

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表