为什么编程语言以及数据库要从1970年1月1日开始计算时
今天一时兴起想起了在SQL Server中使用DateTime.MinValue插入时间时报错的问题,原因就在于数据库的最小时间和.Net里的最小时间不一致导致的,网上查阅了些资料,找到如下结果
Net Framewrok 中,
DateTime.MinValue = 0001/01/01 00:00:00
SqlDateTime.MinValue.Value = 1753/01/01 00:00:00
SQL Server 2005 中,
DateTime 最小值 = 1753/01/01 00:00:00
SmallDateTime 最小值 = 1900/01/01 00:00:00
Net Framewrok 中,
DateTime.MaxValue = 9999/12/31 23:59:59.999
SqlDateTime.MaxValue.Value = 9999/12/31 23:59:59.997
SQL Server 2005 中,
DateTime 最大值 = 9999/12/31 23:59:59.997
SmallDateTime 最大值 = 2079.6.6
所以需要在数据库插入最小时间时不能使用DateTime.MinValue,需要使用
SqlDateTime.MinValue.Value。
好了到现在SQL Server数据库时间问题解决了,突然又想起了系统中有个啥1970年1月1日的时间。那这个时间又是啥来来历呢,怀着好奇宝宝的心理我有在网上查阅了一番得到如下解释:
1.可以简单的这样认为:UNIX系统认为1970年1月1日0点是时间纪元,所以我们常说的UNIX时间戳是以1970年1月1日0点为计时起点时间的。这个解释是懒人最爱^_^
2.这个比较科学
最初计算机操作系统是32位,而时间也是用32位表示。32位能表示的最大值是2147483647。另外1年365天的总秒数是31536000,2147483647/31536000 = 68.1,也就是说32位能表示的最长时间是68年,而实际上到2038年01月19日03时14分07秒,便会到达最大时间,过了这个时间点,所有32位操作系统时间便会变为10000000 00000000 00000000 00000000,也就是1901年12月13日20时45分52秒,这样便会出现时间回归的现象,很多软件便会运行异常了。
到这里,我想问题的答案已经出来了:因为用32位来表示时间的最大间隔是68年,而最早出现的UNIX操作系统考虑到计算机产生的年代和应用的时限综合取了1970年1月1日作为UNIX TIME的纪元时间(开始时间),至于时间回归的现象相信随着64为操作系统的产生逐渐得到解决,因为用64位操作系统可以表示到292,277,026,596年12月4日15时30分08秒,相信我们的N代子孙,哪怕地球毁灭那天都不用愁不够用了,因为这个时间已经是千亿年以后了。
最新内容请见作者的GitHub页:http://qaseven.github.io/
开源SPL消灭数以万计的数据库中间表 中间表是数据库中专门存放中间计算结果的数据表,往往是为了前端查询统计更快或更方便而在数据库中建立的汇总表,由于是由原始数据加工而成的中间结果,因此被称为中间表。在某些大型机构中,多年积累出来中间表的数量居然高达数万张,给系统和使用造成了很多麻烦。
写着简单跑得又快的数据库语言 SPL 单纯的存储并不是数据库的目标,数据库实现的重要功能有两条:计算、事务!也就是我们常说的OLAP和OLTP,数据库的存储都是为这两件事服务的。
数据库对于程序员来说是一个必备的技能,我也开始了数据的学习,看的教程比较老,是郝斌的sqlsever基础教程,用的数据库是sqlsever2008. 说起数据库,之前仿照的医药项目已经开始陆陆续续接触到了,所以也去3wschool上补过一些常用的 sql命令语句。
相关文章
- [Qt教程] 第26篇 数据库(六)SQL关系表格模型QSqlRelationalTableModel
- Laravel - 配置 数据库
- 数据库设计【笔记】
- Serverless 解惑——函数计算如何访问 MySQL 数据库
- 3-项目初始化+数据库的设计+xadmin配置
- MySQL数据库备份
- mysql数据库-基础--长期维护
- SAP 数据库表CRMD_ORDERADM_I字段OBJECT_TYPE的计算逻辑
- Atitit.数据库存储引擎的原理与attilax 总结
- Py之Database:Python和数据库的那些嘻嘻哈哈事详细攻略
- 主要是解决,作为一个数据共享的数据库,存在的数据库统计,然后将计算的数据量输出到自己使用的数据库,进行主页面展示。
- 第四范式OpenMLDB在金融风控数据库的计算优化实践
- Oracle数据库用户管理之二---权限授权去权(用户和角色)
- [ 云计算 | Azure ] 配置Azure Database for MySQL数据库的时区
- 经验谈:数据库压力测试方法小结