zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

为什么编程语言以及数据库要从1970年1月1日开始计算时

数据库计算编程语言 以及 为什么 开始
2023-09-11 14:20:31 时间

今天一时兴起想起了在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命令语句。