為什么編程語言中日期能夠?qū)崿F(xiàn)加減法
一.概要
-
日期類型在編程語言中內(nèi)部是通過number 存儲(chǔ)的
-
日期類型加減實(shí)際是數(shù)字的加減
-
多數(shù)編程語言的日期開始時(shí)間是 1970-01-01 00:00:00
二. 為什么多數(shù)編程語言的開始日期是從1970-01-01 00:00:00 開始
通過查閱資料一般存在兩種解釋
-
多數(shù)編程語言起源于UNIX,UNIX系統(tǒng)的時(shí)間紀(jì)元是1970-01-01 00:00:00,即所為的UNIX時(shí)間戳。
-
最初計(jì)算機(jī)都是32位操作系統(tǒng),時(shí)間需要通過number存儲(chǔ),32位能表示***數(shù)字為2147483647。一年365天的總秒數(shù)位 31536000 ,兩者相除得68.1.所以如果從0000-00-00 00:00:00 算起的話,計(jì)算機(jī)到1901年12月13日就溢出了。而選用1970年的,可以支持到2038年。
這兩種解釋,我個(gè)人比較認(rèn)可UNIX時(shí)間紀(jì)元的說法,畢竟UNIX出現(xiàn)在這一年,作為UNIX的研發(fā)者需要紀(jì)念這個(gè)重要的日子。
三.采用的UNIX時(shí)間紀(jì)元的開發(fā)語言
1.JAVA
文檔地址:http://docs.oracle.com/javase/8/docs/api/java/util/Date.html#Date
不過對(duì)于中國開發(fā)者,通過 System.Out.Println(new Date(0)); ,控制臺(tái)打印的時(shí)間是1970-01-01 08:00:00 ,這個(gè)是因?yàn)橹袊幱跂|8區(qū)的緣由。對(duì)于程序內(nèi)部存儲(chǔ)值無影響。
2.JavaScript
文檔地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date
3.Python
文檔地址: https://docs.python.org/3/library/datetime.html#date-objects
4.ORACLE
文檔地址:http://docs.oracle.com/cd/E11882_01/appdev.112/e13995/oracle/sql/TIMESTAMP.html
5.PHP
文檔地址:http://php.net/manual/en/function.time.php
四 .沒采用UNIX時(shí)間戳的語言
1.基于 .Net 類庫的語言
默認(rèn)采用int64位來表示時(shí)間戳,并且精確到100ns,開始日期點(diǎn)為0001-01-01 00:00:00.000。
文檔地址:https://msdn.microsoft.com/zh-cn/library/z2xf7zzk(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1
2.VBScript
文檔地址:https://www.microsoft.com/china/vbscript/vbstutor/vbsdatatype.htm
這個(gè)開始時(shí)間很奇怪,從API來看,開始時(shí)間是從0100-01-01 00:00:00
不過從代碼測(cè)試來看,開始時(shí)間是從1899-12-30 0 :00:00 開始
五.有關(guān)EXCEL 日期系統(tǒng)
在office excel中存在兩種日期格式1900 和 1904,即日期的開始點(diǎn)為 1900-01-01 00:00:00 和 1904-01-01 00:00:00 。一般Excel 默認(rèn)是按照1900的日期系統(tǒng),且認(rèn)為1900年為潤年,1900年2月分 按照29天計(jì)算。Excel中存儲(chǔ)值得起始日期是從1開始的,即,1900-01-01 00:00:00 在excel中對(duì)應(yīng)的存儲(chǔ)值為1 (天)。