Wendy docker安装部署 dedecms typora 软件开发 curl playframework get Skeljs bootstrap后台管理系统模板 mysql查询结果拼接 matlab中如何定义函数 kali重启网卡 二分查找python python中import用法 python获取时间戳 java接口 java编程课程 java的正则表达式 java接口文档 javafor循环 java泛型方法 javahttp linux远程 php实例 php开发教程 莫愁脚本 内存整理软件 java分布式开发 忧思华光玉 苹果5s降级 h370主板 动态加载js ad下载 编程语言实现模式 微信砍价活动怎么做 音乐狂app winfax jquery下载 欧洲卡车模拟2存档
当前位置: 首页 > 学习教程  > 编程语言

Mybatis(JsonFormat)+PostgreSQL:提取的时间与实际存储时间不同

2021/2/13 17:09:32 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

目录1、问题描述2、解决问题3、原因剖析4、时间字符串格式说明1、问题描述 近期在SpringBootMybatis的项目中,数据库使用的是PostgreSQL。其中有一些表使用了timestamp(6) without time zone字段来存储时间,在Mybatis映射时为了能够满足中国时区时间与时…

目录

    • 1、问题描述
    • 2、解决问题
    • 3、原因剖析
    • 4、时间字符串格式说明

1、问题描述

近期在SpringBoot+Mybatis的项目中,数据库使用的是PostgreSQL。其中有一些表使用了timestamp(6) without time zone字段来存储时间,在Mybatis映射时为了能够满足中国时区时间与时间格式的统一在JavaBean的时间属性上使用@JsonFormat注解。但是出现了诡异的情况:选择返回的时间与数据库存储记录的时间对不上。

如:

数据库存储的记录:
create_time: 2021-02-13 12:14:49

经Mybatis提取并返回前端的Json:
"createTime":"2021-02-13 12:02:00"

2、解决问题

经过一步步排查之后,发现问题可能出现在@JsonFormat注解pattern字段上。

原代码

@JsonFormat(pattern = "yyyy-MM-dd HH:MM:SS", timezone = "GMT+8")
private Date createTime;

修改后的代码

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;

3、原因剖析

yyyy-MM-dd HH:MM:SS这种日期格式并不合适:在分钟位使用MM,解析时会被误以为是月份,从而将14分解析为02【12+2个月】,而在秒钟位使用SS,解析时并无法解析,因此无论什么时间都是00。

4、时间字符串格式说明

常用格式:
yyyy-MM-dd HH:mm:ss 24小时制
yyyy-MM-dd hh:mm:ss 12小时制

字段说明
y不包含纪元的年份。不具有前导零。
yy不包含纪元的年份。具有前导零。
yyyy包括纪元的四位数的年份。
M月份数字。一位数的月份没有前导零。
MM月份数字。一位数的月份有一个前导零。
MMM月份的缩写名称,在 AbbreviatedMonthNames 中定义。
MMMM月份的完整名称,在 MonthNames 中定义。
d月中的某一天。一位数的日期没有前导零。
dd月中的某一天。一位数的日期有一个前导零。
ddd周中某天的缩写名称,在 AbbreviatedDayNames 中定义。
dddd周中某天的完整名称,在 DayNames 中定义。
gg时期或纪元。
h12 小时制的小时。一位数的小时数没有前导零。
hh12 小时制的小时。一位数的小时数有前导零。
H24 小时制的小时。一位数的小时数没有前导零。
HH24 小时制的小时。一位数的小时数有前导零。
m分钟。一位数的分钟数没有前导零。
mm分钟。一位数的分钟数有一个前导零。
s秒。一位数的秒数没有前导零。
ss秒。一位数的秒数有一个前导零。
f秒的小数精度为一位。其余数字被截断。

本文链接: http://www.dtmao.cc/news_show_700075.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?