為什麼程式設計語言以及資料庫要從1970年1月1日開始計算時

來源:互聯網
上載者:User
今天一時興起想起了在SQL Server中使用DateTime.MinValue插入時間時報錯的問題,原因就在於資料庫的最小時間和.Net裡的最小時間不一致導致的,網上查閱了些資料,找到如下結果
Net Framewrok 中,DateTime.MinValue           => 0001/01/01 00:00:00SqlDateTime.MinValue.Value  => 1753/01/01 00:00:00 SQL Server 2005 中,DateTime 最小值              => 1753/01/01 00:00:00SmallDateTime 最小值         => 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.997SQL 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代子孫,哪怕地球毀滅那天都不用愁不夠用了,因為這個時間已經是千億年以後了。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.