Mysql数据库里的时间问题

因为是半路接手的项目,很多参数以及格式都定了下来。

数据库里的时间默认为datetime.

实体类的则是Date

令人头秃。

决定好好理一理这个思路。

先看看Mysql数据库里时间的区别吧。

https://www.cnblogs.com/wlzjdm/p/6953398.html

参考上文

1.关于Mysql

1.1 Date格式

此类型的字段,存储数据格式为:YYYY-MM-DD,它支持的范围为'1000-01-01'到'9999-12-31',并且允许使用字符串或数字为此列复制。

1.2 Datetime格式

日期和时间的组合,存储格式为:YYYY-MM-DD HH:MM:SS,它支持的范围为'1000-01-01 00:00:00'到'9999-12-31 23:59:59',并且允许使用字符串或数字进行分配值。

1.3 TimeStamp格式

这是时间戳,从1970-01-01 00:00:00到当前的时间差值(注意:当你在Java中输出[new Date(0)] 的时候,输出的是:Thu Jan 01 08:00:00 CST 1970,这是因为时区的概念,中国是东八区,所以对应的是早上八点),它精确到毫秒级别,范围为:1970-01-01 00:00:00 到 2037年(参考2038年问题),当值大于2037年就会抛出: [Error Code: 1292, SQL State: 22001]  Data truncation: Incorrect datetime value: '20381212121212' for column 'crt_date' at row 1。设置值时只允许设置数字类型的值。

在为TimeStamp类型字段赋值的时候,值必须大于19700101000000,否则就会抛出: [Error Code: 1292, SQL State: 22001]  Data truncation: Incorrect datetime value: '10831212121212' for column 'crt_date' at row 1。

  1. TIMESTAMP列必须有默认值,默认值可以为“0000-00-00 00:00:00”,但不能为null。

  2. TIMESTAMP列不可以设置值,只能由数据库自动去修改。

例如:

update sys_tables set crt_date = 20081212121212 where table_name = 'sys_dict';

image

 很容易看出,Date仅仅有日期,DateTime加上了时间,而TimeStamp则在Java输出的是:Thu Jan 01 08:00:00 CST 1970

2.关于Mybatis

简述一下mybatis, MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。--来自百度

看了一下sql文

这里和mybatis没啥关系,跳过。

3.关于Java里的实体类。

实体类里用的是Date承接数据。

Date用的是

java.util.Date

查看百度百科可知,需要单独处理Date

 编写工具类,对获取到的时间进行格式化,然后将转化好的时间存到另一个参数lastTime中

 

运行项目:

好了,整理完毕,不会被前端追着打了。

发布了47 篇原创文章 · 获赞 14 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_35097794/article/details/104943089