浅谈Mybatis+mysql 存储Date类型的坑
作者:水平则静 发布时间:2024-01-17 19:13:14
标签:Mybatis,mysql,Date
场景:
把一个时间字符串转成Date,存进Mysql。时间天数会比实际时间少1天,也可能是小时少了13-14小时
Mysql的时区是CST(使用语句:show VARIABLES LIKE '%time_zone%'; 查)
先放总结:
修改方法:
1. 修改数据库时区
2. 在jdbc.url里加后缀 &serverTimezone=GMT%2B8
3. 代码里设置时区,给SimpleDateFormat.setTimeZone(...)
例外:new Date() 可以直接存为正确时间,其他的不行。比如我试过,把new Date用sdf转个2次,然后就错误了
贴一下测试的一下渣码
// 1.new Date()直接存数据库则是正确的日期 结果:√ 190626,数据库存储正常
// Date now = new Date();
// 2,new Date()用simpleDateFormat转化为字符串再转为Date。结果: × 少1天 190625
// Date now1 = new Date();
// String tempStr = yyMMddFormatter.format(now1);
// String tempStrDate = tempStr.split(" ")[0];// 会加上00:00:00
// Date date = yyMMddFormatter.parse(tempStrDate);
// 3.配置文件加上&serverTimezone=GMT%2B8,√ 正确
// 4. 设置中国标准时区 UTC+8 结果:√
// SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
// 设置时区: 中国标准时 China Standard Time UTC+08:00 使用GMT+8东8区,结果:?使用默认时区setTimeZone(TimeZone.getDefault);
// sdf.setTimeZone(TimeZone.getTimeZone("UTC+8"));
// System.out.println(sdf.getTimeZone().toString());
// Date date = sdf.parse(liftMaxDt);
// System.out.println(sdf.getTimeZone().toString());
// System.out.println(date);
//
// Date targetDate = new Date(date.getTime());
// System.out.println("------------------");
// System.out.println(targetDate);
// 5. 测试毫秒数 new Date(ms);但是要先使用sdf转入参 结果:× 问题就在于SimpleDateFormat会混乱时区
// SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
// Date date = sdf.parse(liftMaxDt);
// Date targetDate = new Date(date.getTime());
// System.out.println("使用sdf转换date,在new Date(date.getTime())-----------");
// System.out.println(targetDate);
// 使用LocalDate.结果: × 还是少一天
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyMMdd");
LocalDate ldt = LocalDate.parse(liftMaxDt, df);
System.out.println("String类型的时间转成LocalDateTime:"+ldt);
// LocalDate转LocalDateTime
LocalDateTime lll = LocalDateTime.of(ldt, LocalTime.of(0,0,0));
ZoneId zone = ZoneId.systemDefault();
Instant instant = lll.atZone(zone).toInstant();
Date targetDate = Date.from(instant);
// 将对象里时间属性设置为String,数据库里仍然用Date,用数据库的时间函数转化
最后,还是采用的数据库为timestamp类型,用mysql的时间函数进行转换,保证时间为数据库时间
补充知识:mybatis解决java中的date类型存入oracle数据库之后不显示时分秒
实体类中类型为java.util.Date
private Date update_date;
数据库中对应字段的类型为Date
不显示 时分秒 的情况:
Mapping文件中对应字段的jdbcType为DATE类型
如果显示时分秒的话,只需要将Mapping文件中对应字段的类型改为TIMESTAMP即可.
来源:https://blog.csdn.net/qq_35911589/article/details/93759855
0
投稿
猜你喜欢
- 安装PandasPandas是构建在Python编程语言之上的一个快速、强大、灵活且易于使用的开源数据分析和操作工具。Pandas是基于Nu
- 本文实例为大家分享了python matlibplot绘制3D图形的具体代码,供大家参考,具体内容如下1、散点图使用scatterfrom
- 天下武功,唯快不破。编程也不例外,你的代码跑的快,你能快速找出代码慢的原因,你的码功就高。安装pip install pyinstrumen
- 我们给大家详细分析了一下在JS调试的时候经常用到的断点调试,并把经验和技巧做了总结,以下是全部内容:1.断点调试是啥?难不难?断点调试其实并
- Like中文解释为喜欢的意思,但当应用于MySQL数据库中,Like则是一种语句,用于模糊查询,主要是针对字符型字段的,在一个字符型字段列中
- 首先要导入JDBC的jar包;接下来,代码:Class.forName(xxx.xx.xx)返回的是一个类Class.forName(xxx
- Silverlight和Flash,到底谁更强?谁更有优势?很多初接触Silverlight和Flash的人总是会问这个问题,因为它们在表面
- python的try语句有两种风格一是处理异常(try/except/else)二是无论是否发生异常都将执行最后的代码(try/finall
- 问题定义一个int型的一维数组,包含10个元素,分别赋值为1~10, 然后将数组中的元素都向前移一个位置,即,a[0]=a[1],a[1]=
- 此脚本从给定的网页中检索所有链接,并将其保存为txt文件。(文末有完整源码)这是一个简单的网络爬虫示例,使用了 requests 库来发送
- for循环只是一个多一点的代码,同时循环添加到它。而所涉及的一个循环的共同任务是: 设置一些计数器变量的初始值。 请检查条件语句是正确的。
- pLSA(probabilistic Latent Semantic Analysis),概率潜在语义分析模型,是1999年Hoffman提
- 本节我们再来了解下 Requests 的一些高级用法,如文件上传,代理设置,Cookies 设置等等。1. 文件上传我们知道 Reqeues
- numpy.nan的数据类型是float类型import numpy as nptype(np.nan) # float任何数字和numpy
- #!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2020/02/11
- 前言本篇使用Python Web框架Django连接和操作MySQL数据库学生信息管理系统(SMS),主要包含对学生信息增删改查
- 本文实例为大家分享了python给心爱的人每天发天气预报的具体代码,供大家参考,具体内容如下下面的代码实现了用了之前获取天气的代码,然后用i
- 最近从某网站下载了一批文档,但是文件是用数字串命名的文档(很多图书馆都这样吧),现在我也下载完了这些文件,也有这些文件的列表,就是不能一个一
- GUI编程之 Pack、Place、Grid的区别本文讲述如何使用 tkinter 的布局管理 (被称作 layout managers 或
- 我们一般采用photoshop等做图工具制作电视扫描线效果图片:首先做一个黑白相间的图案,然后用这个图案进行填充,再调整图层的模式或者透明度