加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

为什么DB的设计中要使用Long来替换掉Date类型

发布时间:2020-12-14 06:37:08 所属栏目:Java 来源:网络整理
导读:这里是修真院后端小课堂,每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析后端知识/技能,本篇分享的是: 【为什么DB的设计中要使用Long来替换掉Date类型 】 大家好,我

这里是修真院后端小课堂,每篇分享文从

【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

八个方面深度解析后端知识/技能,本篇分享的是:

【为什么DB的设计中要使用Long来替换掉Date类型 】

大家好,我是IT修真院上海分院第02期学员,一枚正直善良的java程序员。

今天给分享一下修真院java任务一中关于数据库的相关知识。

1.背景介绍

在对数据库中的记录进行操作的时候,需要牵涉到对时间数据的处理,如create_at,update_at等字段,数据库中有专门用于存储时间的类型,date,还可以将类型设置为long类型,那么两者的有何差异?

2.知识剖析

MySQL中的表示时间的类型

date:日期,占用三个字节,1000-01-01——9999-12-31

datetime:日期+时间,1000-01-01 00:00:00” 到“9999-12-31 23:59:59,占用8个字节,datetime类型适合用来记录数据的原始的创建时间,因为无论你怎么更改记录中其他字段的值,datetime字段的值都不会改变,除非你手动更改它。

timestamp:日期+时间,占用4个字节,“19700101080001——20380119111407,timestamp类型适合用来记录数据的最后修改时间,因为只要你更改了记录中其他字段的值,timestamp字段的值都会被自动更新。

MySQL中的bigint类型

bignit,表示从-2^63到2^63-1(即从-9,223,372,036,854,775,808到 9,807)之间的整数,它占用了八个字节的存储空间。

3.常见问题

1.java中对时间处理的类比较混乱,处理时间的类有:java.util.Date,java.sql.Date ,java.sql.Time ,java.sql.Timestamp,java.util.Calendar ,java.util.TimeZone

2.时区,在获取当前时间的时候,各个地区在同一个时间点会有不同的时间表示

3.精度,将java.util.Date转为java.sql.Date时候,日期的时分秒会被去掉,数据的精度发生变化了。而JDBC中定义接口时候,用的是java.sql.Date,而我们常常用到的Date都是java.util.Date,这往往导致一些转换过程中发生误差。java.sql.Timestamp类,它保持了日期数据原有的精度。可以实现和java.util.Date的无损转换。但是Timestamp这个类在一些预定义SQL中常常会出问题

java.sql.Date,在JDBC接口中使用了,如果对其进行修改,JDBC接口规范也要改,那么将引发各个数据库厂商对数据库驱动也要改,这是不可接受的。

4.解决方案

将date类型转换为long类型

1.有利于计算时间差

2.方便java与数据库之间的传输

5.编码实战

可以通过long login_at = System.currentTimeMillis()获得当前时间的long类型

?也可以通过Date date1=new Date()来获得当前时间,再用long time=date1.getTime()将其转化为long类型。

然后在数据库中的相应字段设置类型为bigint即可,在数据库中取得数据后,可以在转为相应的时间格式。

作者:刻砺思 链接:https://www.jianshu.com/p/9b67a447467b 來源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

更多内容,可以加入IT交流群565734203与大家一起讨论交流

这里是技能树·IT修真院:,初学者转行到互联网的聚集地

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读