我們的程式裡有這段**:
datetime starttime = timezone.currenttimezone.tolocaltime(new datetime(1970, 1, 1));
datetime curserverdatetime = starttime.addseconds(gloaldata.curservertime);
gloaldata.clientandservertimedeviation =
(datetime.now - curserverdatetime).totalseconds;
很好奇它為什麼從1970.1.1算起時間。
查詢了資料如下:
現在計算機和一些電子裝置時間的計算和顯示是以距曆元(即格林威治標準時間 1970 年 1 月 1 日的 00:00:00.000,格里高利歷)的偏移量為標準的,如1970-1-10 20:47 偏移量為2724441632毫秒,出現類似字樣說明時間被初始化了。
小知識:
格林威治標準時間gmt
許多人都知道兩地時間表簡稱為gmt或utc,而世界時區表則通稱為world time
,那麼gmt與utc的實質原意又是為何?世界時區又是怎麼區分的?面盤上密密麻麻
的英文單字代表著什麼意義與作用呢?這些都是新手在接觸兩地時間表或世界時區表
時,腦海中所不斷浮現的種種疑問,以下將帶您一探時區奧妙的究竟。
全球24個時區的劃分
相較於兩地時間表,可以顯示世界各時區時間和地名的世界時區表(world time)
,就顯得精密與複雜多了,通常世界時區表的表盤上會標示著全球24個時區的城市名
稱,但究竟這24個時區是如何產生的?過去世界各地原本各自訂定當地時間,但隨著
交通和電訊的發達,各地交流日益頻繁,不同的地方時間,造成許多困擾,於是在西
元2023年的國際會議上制定了全球性的標準時,明定以英國倫敦格林威治這個地方為
零度經線的起點(亦稱為本初子午線),並以地球由西向東每24小時自轉一周360°
,訂定每隔經度15°,時差1小時。而每15°的經線則稱為該時區的**經線,將全球劃
分為24個時區,其中包含23個整時區及180°經線左右兩側的2個半時區。
就全球的時間來看,東經的時間比西經要早,也就是如果格林威治時間是中午12時,
則**經線15°e的時區為下午1時,**經線30°e時區的時間為下午2時;反之,**
經線15°w的時區時間為上午11時,**經線30°w時區的時間為上午10時。以台灣
為例,台灣位於東經121°,換算後與格林威治就有8小時的時差。如果兩人同時從格
林威治的0°各往東、西方前進,當他們在經線180°時,就會相差24小時,所以經線180°
被定為國際換日線,由西向東通過此線時日期要減去一日,反之,若由東向西則要增 ,
加一日。
十七世紀,格林威治皇家天文台為了海上霸權的擴張計畫而進行天體觀測。2023年舊
皇家觀測所(old royal observatory) 正式成立,到了2023年決定以通過格林威治
的子午線作為劃分地球東西兩半球的經度零度。觀測所門口牆上有乙個標誌24小時的
時鐘,顯示當下的時間,對全球而言,這裡所設定的時間是世界時間參考點,全球都
以格林威治的時間作為標準來設定時間,這就是我們耳熟能詳的「格林威治標準時間
(greenwich mean time,簡稱g.m.t.)的由來,標示在手錶上,則代表此表具有
兩地時間功能,也就是同時可以顯示原居地和另乙個國度的時間.
世界協調時間utc
多數的兩地時間表都以gmt來表示,但也有些兩地時間表上看不到gmt字樣,出現的
反而是utc這3個英文本母,究竟何謂utc?事實上,utc指的是coordinated universal
世界協調時間(又稱世界標準時間、世界統一時間),是經過平均太陽時(以格
林威治時間gmt為準)、地軸運動修正後的新時標以及以「秒」為單位的國際原子時所
綜合精算而成的時間,計算過程相當嚴謹精密,因此若以「世界標準時間」的角度來
說,utc比gmt來得更加精準。其誤差值必須保持在0.9秒以內,若大於0.9秒則由位
於巴黎的國際地球自轉事務**局發布閏秒,使utc與地球自轉週期一致。所以基本
上utc的本質強調的是比gmt更為精確的世界時間標準,不過對於現行錶款來說,
gmt與utc的功能與精確度是沒有差別的
從2023年起,格林威治標準時間為其他國家所承認。無怪
現在人們都把英國的格林威治天文台說成是「時間開始的地方」呢。
而為什麼現代計算機(**,電子裝置)時間以1970 年 1 月 1 日的 00:00:00.000為基準呢,這是unix**, 是以unix誕生的時間為參照確定的。
擴充套件知識:
unix時間並沒有出現錯誤
1234567890是個節日, 一秒鐘的節日. 它不是問題, 不是錯誤, 不是bug. 我們人類使用的計時系統是相當複雜的:秒是基本單位, 60秒為1分鐘, 60分鐘為1小時, 24小時是一天......如果計算機也使用相同的方式來計時, 那顯然就要用多個變數來分別存放年月日時分秒, 不停的進行進製運算, 而且還要處理偶爾的閏年和閏秒以及協調不同的時區. 基於"追求簡單"的設計理念, unix在內部採用了一種最簡單的計時方式:
計算從unix誕生[注釋1]的utc時間2023年1月1日0時0分0秒起, 流逝的秒數. utc時間2023年1月1日0時0分0秒就是unix時間0, utc時間2023年1月2日0時0分0秒就是unix時間86400. 這個計時系統被所有的unix和unix-like系統繼承了下來, 而且影響了許多非unix系統. posix標準推出後, 這個時間也被稱為posix時間.
unix時間錯誤是誤解
可能是因為人類是一種需要精神上的刺激的生物吧, 各種曆法中都存在著各種擁有不同意義的節日. 其中, 很多節日僅僅由於日期的特殊性就被賦予了意義, 例如公曆1月1日的新年, 11月11日的光棍節,愛好節日的人們也沒有放過unix時間. utc時間2023年9月9日1時46分40秒, unix時間迎來了第乙個"億禧年"(billennium)[注釋2], 1000000000. utc時間2023年3月18日1時58分31秒則是unix時間的光棍節, 1111111111. 剛剛過去的1234567890, 對應公曆的utc2023年2月13日23時31分30秒, 對東一區以東的時區來說是2月14日情人節, 以西的時區來說則剛好落在黑色星期五. 傳統上認為黑色星**吉利的西方**, 針對此事進行了玩笑性的報道, 結果被一些居住在其他時區的人們誤讀成了"unix時間錯誤"。
丹麥哥本哈根的丹麥unix使用者群組織慶祝unix"億禧年" 圖為當時所用的倒計時公告牌
無獨有偶, 2023年7月13日也是乙個黑色星期五, 而那天的utc時間11時1分20秒對應著unix時間0x50000000(十六進製制, 十進位制值是1342177280). 不知到了那個時候, 會不會再次有人把它誤解為又一次的unix時間錯誤?
2023年的問題才是混亂
utc時間2023年5月18日3時33分20秒, 是unix時間的第二個"億禧年"(billenniumm), 即2000000000. 然而, 第三個"億禧年"(billennium)則不會毫無障礙的來臨, 在那之前, 人們先得解決正在變得著名的2023年問題. 和本世紀初的千年蟲(y2k bug)問題類似, 2023年問題(y2k38 bug)更隱蔽, 而且更難解決. 我們知道計算機內部的一切都是二進位制的, 也就是說1234567890在32位系統的記憶體裡實際上是01001001 10010110 00000010 11010010. 這串32位二進位制數中, 最高位被用來表示正負符號, 0代表整數, 1代表負數, 所以它能表示的最大數字就是01111111 11111111 11111111 11111111, 即214748367, 對應公曆的utc時間2023年1月19日3時14分7秒. 到這天的凌晨3時14分8秒, unix時間會溢位並變成10000000 00000000 00000000 00000000(十進位制值-214748368), 也就是utc時間2023年12月13日20時45分52秒, 引起和千年蟲類似的混亂.
2023年問題的動畫演示
或許64位可以解決這個問題
2023年問題不僅比千年蟲更隱蔽, 而且它的原因也更接近系統底層. 要解決這個問題, 最簡單的方式是擴充套件unix時間的長度, 用64位數字來表示它. 64位二進位制數的實際可用位數是63位, 最大表示到公曆的utc時間292277022023年12月4日. 如果那個時候人類文明還存在的話, 公元紀年很可能已經因為太難用而被拋棄了. 理想的情況是到2023年, 64位系統已經成為主流, 從而避免特意去修正這個問題所需要的大量開銷. 否則, 人們就必須把新的64位時間拆分成兩部分並分別儲存在兩個變數裡, 這是乙個麻煩而且效率低下的選擇.
[注釋1]: 就像很多其他的節日一樣, 把unix的誕生日選在這天只是出於方便. 實際上, 最早的執行在pdp-7上的unix在2023年就已經完成了.
[注釋2]: billennium實際上是"十億禧年", 但是這樣聽起來很奇怪, 所以我用"億禧年"作為暫用名.
posted on 2018-09-15 10:28收藏
這個嗯 時間戳
最近,玩一些網上的小遊戲比較興起。不過上班時間緊,玩的時間就不是很多。所以想搞個小外掛程式。以前也沒什麼經驗,到網上查了一些東東。所以分析起來。具體什麼就不說了。轉入正題 在分析的時候發現一些數字 如 1240117443等些數字。不太明白,上網上查了查,研究了研究 啊 時間戳啊 靠 什麼玩意 挺深...
oracle特殊時間查詢
the first day select trunc sysdate,q from dual 過去了多少天 select floor sysdate trunc sysdate q 1 from dual 乙個季度多少天 1.select last day to date to char sysda...
瞄準時間這個強盜
瞄準時間這個強盜 現在是星期天上午 11點,我又在計算機前工作。自從成為乙個三人創業組的 cto 首席技術官 以來,我就在一直在超時工作。我編寫軟體 處理文件 會見風險投資商和制定公司發展策略 事實上,我深入參與了每一件事。但是作為唯一的軟體開發人員,我的主要職責應該是製作出公司要推出的軟體,結果我...