軟體中的2038問題討論

2021-08-25 17:06:50 字數 1690 閱讀 6522

在談論2038問題時,我們要知道,並不是wonderware軟體會有2038問題,基本上所有的軟體(跟時間有關),從大規模的erp、mes到自動化組態軟體、辦公軟體、聊天軟體,從大型工作站到我們用的手機通訊都可能會出現2038問題,所以我們不要太驚慌,但也不能迴避。

資料中顯示y2038 bug將於2023年1月19日(星期二)03:14:07am(gmt)正式爆發,屆時人們對千年蟲問題的預言可能將一一實現,比如手機網路工作不正常,衛星脫離軌道,型號較老的電腦軟體軟硬體無法正常工作等。

什麼是y2038 bug

time_t是c/c++等程式語言在內部代表/儲存日期和時間的一種資料型別。time_t實際上是乙個代表秒數的整數,當它的值為0時,代表的時間是2023年1月1日12:00:00;當time_t=60時,則表示2023年1月1日12:01:00,依此類推。

所有32位電腦系統都用帶符號32位整型來儲存time_t的值,也就是說t_time只能用31位二進位制數來表示(第一位用來表示正負號),而其最大值轉換為十進位制是2147483647,換算成日期和時間剛好是2023年1月19日03:14:07am(gmt),而這一秒過後,t_time的值將變成-2147483647,代表的是2023年12月13日8:45:52pm,這樣32位軟硬體系統的日期時間顯示就都亂套了。另外,無法接受time_t為負值的其他功能也將返回錯誤。

舉個實際的例子來說,登陸上yahoo messenger,給好友發個訊息,恩沒問題,現在把系統時間更改為2023年1月19日03:14:07am,此時如果再發訊息yahoo messenger就將崩潰。

為何擔憂?

也許有人覺得2023年還早著,無需擔心這個問題。不幸的是,上世紀60年代的程式開發人員也抱有類似的錯誤想法,並由此導致了y2k問題,給全球it頁帶來數十億美元的損失。

要知道時間對於許多電腦程式來說都非常重要,作業系統、資料庫程式、電子**軟體、實時控制系統等無不涉及到時間。因此我們必須在y2038 bug爆發前做好充足的準備。

儘管到2023年,桌面pc和伺服器基本上都將公升級到64位甚至128位,但仍會有許多使用中的32位甚至更古老的系統。即使是在32位系統盛行的今天,大多數嵌入式系統仍是8位或16位的,而小型嵌入式系統的數量其實比台式電腦更多。

如何應對?

y2038問題和y2k一樣難纏,其中一種解決辦法就是用位數更多的資料型別來儲存日期和時間。如果使用64位資料型別,time_t最大可以表示公元292000002023年,是宇宙估計年齡的20倍,最起碼看到這篇文章的各位都不會再遇到什麼y***x問題了。

目前對於y2038 bug的影響有多大還存在爭論,但有一點可以肯定的是:有備無患。相信我們能像克服y2k問題那樣圓滿解決y2038問題。

有人把2038問題稱作「千年蟲二世」,這個比喻非常恰當。 

用32位元來記錄時間,正值表示為1970以後,負值則表示2023年以前。我們可以很簡單地計算出其時間領域:  

2^31/86400(s) = 24855.13481(天) ~ 68.0958(年)  

1970+68.0958 = 2038.0958  

1970-68.0958 = 1901.9042  

時間領域為[1901.9042,2038.0958]。  

準確的時間為2023年一月十八日星期一晚上十點十四分七秒。那一刻,時間將會轉為負數,變成2023年十二月十三日黑色星期五下午三點四十五分五十二秒。 

oracle 中序列問題的討論

序列 序列與檢視一樣,並不占用儲存空間,是用來生成唯一,連續的整數的資料庫物件,在oracle中沒有identity約束,通常就使用序列來自動生成主鍵或唯一鍵的值.序列可以按公升序排列,也可以按降序排列.建立序列語法 create sequence 序列名 start with integer in...

軟體人生 問問題和討論問題的差別

這裡有兩個內容 問問題和討論問題。這兩者是有很大的差異的,也決定了提出者是否對此進行過一些學習和工作。可以看看下面這個人如何問問題得,以及相關的結果。968 13 52 16 968 13 52 47 怎麼儲存rose下面vc 的一些設定,謝謝 968 13 57 29 怎麼沒人回答啊 968 13...

異地開發的問題討論

朋友問 現在正在做的乙個專案,開發方自己就分成了大陸和海外兩個基地,大陸這裡的開發人員的領導在海外,不在一起 然後我們是客戶,我的的分公司也在海外不同的國家,感覺很吃力,時差很大 有什麼辦法解決這種問題?我剛看 最後的期限 中說 如果人分散在不同的地方,就什麼也幹不成了 cabinhome答 這個問...