為什么編程語言中日期能夠?qū)崿F(xiàn)加減法
一.概要
-
日期類型在編程語言中內(nèi)部是通過number 存儲的
-
日期類型加減實際是數(shù)字的加減
-
多數(shù)編程語言的日期開始時間是 1970-01-01 00:00:00
二. 為什么多數(shù)編程語言的開始日期是從1970-01-01 00:00:00 開始
通過查閱資料一般存在兩種解釋
-
多數(shù)編程語言起源于UNIX,UNIX系統(tǒng)的時間紀(jì)元是1970-01-01 00:00:00,即所為的UNIX時間戳。
-
最初計算機(jī)都是32位操作系統(tǒng),時間需要通過number存儲,32位能表示***數(shù)字為2147483647。一年365天的總秒數(shù)位 31536000 ,兩者相除得68.1.所以如果從0000-00-00 00:00:00 算起的話,計算機(jī)到1901年12月13日就溢出了。而選用1970年的,可以支持到2038年。
這兩種解釋,我個人比較認(rèn)可UNIX時間紀(jì)元的說法,畢竟UNIX出現(xiàn)在這一年,作為UNIX的研發(fā)者需要紀(jì)念這個重要的日子。
三.采用的UNIX時間紀(jì)元的開發(fā)語言
1.JAVA
文檔地址:http://docs.oracle.com/javase/8/docs/api/java/util/Date.html#Date
不過對于中國開發(fā)者,通過 System.Out.Println(new Date(0)); ,控制臺打印的時間是1970-01-01 08:00:00 ,這個是因為中國處于東8區(qū)的緣由。對于程序內(nèi)部存儲值無影響。
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時間戳的語言
1.基于 .Net 類庫的語言
默認(rèn)采用int64位來表示時間戳,并且精確到100ns,開始日期點為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
這個開始時間很奇怪,從API來看,開始時間是從0100-01-01 00:00:00
不過從代碼測試來看,開始時間是從1899-12-30 0 :00:00 開始
五.有關(guān)EXCEL 日期系統(tǒng)
在office excel中存在兩種日期格式1900 和 1904,即日期的開始點為 1900-01-01 00:00:00 和 1904-01-01 00:00:00 。一般Excel 默認(rèn)是按照1900的日期系統(tǒng),且認(rèn)為1900年為潤年,1900年2月分 按照29天計算。Excel中存儲值得起始日期是從1開始的,即,1900-01-01 00:00:00 在excel中對應(yīng)的存儲值為1 (天)。