easyexcel 日期类型 convert_数据库的几种日期时间类型,你真的会用吗?

日期和时间是每个系统,每个数据库设计必不可少的部分。也是容易被大家忽视的部分。很多开发者可能根本不了解以不同类型存储日期和时间意味着什么。

有朋友可能会说,数据库定义一个datetime或timestamp类型的字段,然后在Java代码中获取当前时间并存入数据库不就可以了吗?

Date now = 

最近设计新系统的数据库,涉及到跨时区的问题,于是专门调研了不同日期时间类型的利弊,也咨询了不少同行使用的情况。这里分享给大家。

常见的日期时间使用情况有如下几种:字符串、Datetime、Timestamp、Unix timestamp。如果将日期和时间具体拆分细化又可包含DATE、TIME、YEAR,这部分我们这里暂且不过多讨论。

字符串存储日期

把日期和时间当做一个字符串进行存储,进而将日期和时间拆分成两个字段,一个字段记录日期(如yyyy-MM-dd),另外一个字段存储时间(如:HH:mm:ss)的形式。

此种方式就不多说,除非极个别的场景,不建议使用。当使用此种方式进行处理日期,不仅性能有问题,比较、处理、取范围等都是麻烦事。

之所以提出这种方式,也是提醒大家,如果你的数据库日期字段还在用字符串存储,需要慎重考虑一下了。

DateTime类型

DateTime类型存储的值既有日期又有时间。我们直观看到的格式为:yyyy-MM-dd HH:mm:ss。它支持的时间范围是“1000-00-00 00:00:00”到“9999-12-31 23:59:59”。

但DateTime中并未存储时区信息,只存储了本地时间。也就是说:如果你将服务器的时区进行修改,数据库中记录的日期和时间并不会对应的变化。

那么,读出的数据与新存储的数据便是不一致的,也可以说是错误的。

通常,针对此种情况,如果涉及到跨时区问题,可考虑单独用一个字段来存储时区。

Timestamp类型

Timestamp类型:也是既有日期又有时间的数据。存储和显示的格式跟Datetime一样。支持的时间范围是“1970-01-01 00:00:01”到“2038-01-19 03:14:07”。

Timestamp类型不仅存储了日期和时间,还存储了时区信息。如果以Timestamp类型存储,各数据库的实现会有所不相同,有的进行了内部时区自动转换。

如果应用服务器的时区和数据库服务器的时区不一致,你无法确定数据库驱动程序会不会自动帮你转换。

同时,时间范围是Timestamp硬伤。

Unix timestamp

由于时区问题,地球上不同地方的人看到太阳升起的时间是不一样的。比如欧洲和北京时差有6-7个小时,当早上8点在北京看到太阳时,欧洲还处于凌晨1-2点。

除了上面所说的通过Timestamp类型存储包含时区的日期和时间外,还可以通过“绝对时间”来进行计算,单位为秒。

在计算机中,当前时间是指从一个基准时间(1970-1-1 00:00:00 +0:00)到现在的秒数,用一个整数表示。

在Java编程语言中我们可以通过如下两种方式(这里单位为毫秒)获取:

System.current

那么,我们只需要将表示绝对时间的时间戳通过Long类型或float类型保存到数据库中,当不同时区使用时直接格式化成对应的字符串就可以了。对应数据库类型为Bigint或float。

关于使用绝对时间戳的好处有以下几项:

1、数据存储的时区问题不存在了,只是一个绝对的数值。

2、比较时也很简单,只用比较两个数值的大小或范围即可,范围可采用between(?, ?)形式的SQL。

3、显示问题也很容易处理,各个展示端,只需要根据所在时区对数值进行转换即可,即便是JavaScript也能正常处理。

有朋友可能会说,数据库的可读性太差。在调研时我也遇到类似的疑问,后来咨询了架构师的朋友,他说mysql提供了丰富的函数,可以进行转换。

972df9565c042f82f8e79eaf6aca88f7.png

上图中,数据库存储的是毫秒数,通过FROM_UNIXTIME函数,在查询时将其转换成指定格式即可。如果你的数据库存储的单位为秒,则在SQL中无需除以1000。

关于日期时间的其他事项

为了调研数据库日期和时间的设置,也参考了阿里的开发手册,令人疑惑的是阿里使用的竟然是datetime类型。

32d16cc604cdf620a34c2168effc948b.png

后来跟PayPal的朋友沟通之后,便豁然开朗了。他说:阿里的开发手册在我们公司只做参考。

的确如此,毕竟每个公司的业务范围不同,使用场景也不同。优秀的理念可以参考,但不能照搬。就好比本篇文章,介绍了不同类型的日期和时间存储,而根据你的业务场景选择最适合的那便是最好的。

我这里最终决定用绝对时间戳来进行处理。

推荐阅读

  • 为什么新出的《阿里Java开发手册》都要读一读?

  • Idea自动生成代码神器EasyCode,让你如虎添翼

  • 偷看了隔壁老王的文章,发现String拼接另有天地

  • 聊聊工作

程序新视界一个“软实力”,“硬技术”同步成长的公众号1cca34a73c43a9f39035927427eee8bf.png长按识别二维码,关注公众号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/513415.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从重复到重用

简介: 开发技术的发展,从第一次提出“函数/子程序”,实现代码级重用;到面向对象的“类”,重用数据结构与算法;再到“动态链接库”、“控件”等重用模块;到如今流行的云计算、微服务可重用整个系…

JAVA中randomfile_java中的RandomAccessFile的用法

Java的RandomAccessFile提供对文件的读写功能,与普通的输入输出流不一样的是RamdomAccessFile可以任意的访问文件的任何地方。这就是“Random”的意义所在。RandomAccessFile的对象包含一个记录指针,用于标识当前流的读写位置,这个位置可以向…

官宣|Apache Flink 1.13.0 正式发布,流处理应用更加简单高效!

简介: Flink 1.13.0 版本让流处理应用的使用像普通应用一样简单和自然,并且让用户可以更好地理解流作业的性能。 ​翻译 | 高赟 Review | 朱翥、马国维 Flink 1.13 发布了!Flink 1.13 包括了超过 200 名贡献者所提交的 1000 多项修复和优化…

lightning接口_Lightning太赚钱?iPhone永远不会用Type-C

欧盟日前通过了法案,要求在欧洲销售的各手机制造商要统一充电接口,全部采用USB Type-C接口,但这可能让一直使用Lightning(闪电)充电接口的Apple受到很大影响。虽说目前苹果的Mac电脑、iPad平板电脑以及智能音箱等部分产品都开始使用USB Type-…

这个冬天,头秃了,口袋也空了......

秋天里的第一杯奶茶刚喝完,冬天里的第一条秋裤就要安排上!不让加班的程序员,从此的生活便不只有脑袋秃秃,还有口袋空空!从外包出来,没想到新的面试让我手忙脚乱外包虐我千百遍,只能待她如初恋&a…

云数据仓库的未来趋势:计算存储分离

简介: 随着云时代的到来,数据库也开始拥抱云数据库时代,各类数据库系统在各内外云平台百花齐放,有开源的MySQL、PostgreSQL、MongoDB,传统数据库厂商的SQLServer、Oracle,云厂商自研的Aurora、Redshift、Po…

Java内存配太大导致fullgc_记一次因为短命大对象导致fullGC的问题

写在前面java内存申请和释放均是由jvm在控制。而释放往往会出现各种各样的问题,经常一个引用没处理好就引起内存泄漏,最后引发OOM。如果发生在重要业务系统还可能出现严重的生产事故。 因此内存使用一定要谨慎,特别是引用要及时断链。虽然jvm…

异步编程到底在说啥?

作者 | 码农的荒岛求生来源 | 码农的荒岛求生之前很多同学在微信上问能不能讲讲异步编程是怎么一回事儿,今天就和大家简单聊一聊这个话题。我们以函数调用为例,假设有这样的代码:void B() {lines read(filename);sum(lines); }void A() {...…

如何让评审人爱上我

简介: 今天小编作为一个开发者,放下外部的客观因素,仅从一个代码的实现者,一个被评审人的角度去思考如何让评审变得高效而富有意义。换句话说:如何让评审人爱上我(被评审人)。 众所周知&#x…

centos8安装mysql_CentOS8+FreeRadius+Mysql8.0+daloRadius建立Radius服务器

Linux发行版:CentOS8-1905数据库:Mysql8.0create WEB软件:httpddaloRadius前端使用PHPyum -y install update yum -y install httpd //web服务器 yum -y install vim // yun -y install wget // yum -y install net-to…

2025年公有云或将服务中国过半数字经济

简介: 2025年公有云或将服务中国过半数字经济阿里云研究院 高级战略总监 麻芃2020年,疫情“黑天鹅”对全球经济社会运行造成剧烈冲击,但数字经济的引擎作用却逆势凸显。去年我国数字经济整体规模达到39.2万亿元,实现9.7%的高速增长…

php mysql 绕过_PHP中md5绕过

一、md5($password,true)的SQL注入问题这里要提到一下MySQL中的数值比较问题。1、当数字和字符串比较时,若字符串的数字部分(需要从头开始)和数字是相同的,那么则返回的是true。select if(1"1abcd","等于","不等于") as t…

重磅发布:微服务引擎 MSE 专业版

简介: 性能提升 10 倍,更高的 SLA 保障,新用户限时抢购 8 折资源包。 微服务引擎 MSE 专业版发布,支持 Nacos 2.0 ,相比基础版,专业版具有更高的 SLA 保障,性能提升十倍,99.95%可用…

45分钟,411个中小品牌天猫双11实现新跨越

CSDN从天猫获悉,今年天猫双11,有一批中小品牌实现跨越式增长。截至11月11日0点45分,已有411个去年成交额过百万的中小品牌,今年销售额突破千万;更有40个去年双11成交额千万级的品牌,在今年双11成交额突破了…

组装台式电脑配置清单_攒机必备!各种价位的台式电脑配置清单!

点击上方「软件分享云」关注我们台式机,是一种独立相分离的计算机,完完全全跟其它部件无联系,相对于笔记本和上网本体积较大,主机、显示器等设备一般都是相对独立的,一般需要放置在电脑桌或者专门的工作台上。因此命名…

达摩院重要科技突破!空天数据库引擎Ganos解读

简介: Ganos空天数据库引擎是李飞飞带领的达摩院数据库与存储实验室研发的新一代位置智能引擎,采用了平台即服务、多模融合、计算下推和云原生全新处理架构,为政府、企事业单位、泛互联网客户提供移动对象、空间/时空、遥感多模态数据混合存储…

brainfuck 在线_酒店在线声誉持久战 重视社媒舆论 保持品牌一致性

维护品牌或酒店声誉是一场持久战,这对塑造积极的品牌认知和提升客户满意度至关重要。声誉管理包括两个关键部分:引导客人评价和公众舆论,并以适当的方式进行反馈。就在线声誉管理而言,品牌还需要注意另外一点,公众会在…

2021天猫双11:阿里巴巴业务已全部跑在阿里云上

“今年天猫双11是首个100%的云上双11,成功扛住了全球规模最大的流量洪峰。”11月11日,阿里巴巴首席技术官程立表示,阿里巴巴业务已全部跑在阿里云上,体验如丝般顺滑。经过历年双11的“大考”,阿里技术实现了多级跳跃。…

从“嵌入式”到“物联网”有哪些变化?

简介: 经过几十年发展,嵌入式技术已经用在了我们生活中的方方面面,但是嵌入式始终都带有小众,专业性强的属性,让很多非嵌入式领域的同学望而却步。近十几年的发展,物联网覆盖了越来越多领域,包括…

Serverless Devs 的官网是如何通过 Serverless Devs 部署的

简介: 只有自己吃自己的狗粮,自己做的东西才不“🐶”。Serverless Devs 自发展之处到现在,已经经历了几个月的时间,在这几个月,Serverless Devs 的成长是迅速的,这很大一部分的原因是“我们在吃…