成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

什么是2038問題?

開發(fā) 前端
不知道你有沒有聽過2038問題?無論你是否聽過,本文將帶你認識什么是2038問題。

什么是2038問題

不知道你有沒有聽過2038問題?無論你是否聽過,本文將帶你認識什么是2038問題。

[[316871]]

Unix時間戳

定義為從格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現(xiàn)在的總秒數(shù)。

而在C語言中,常用time_t來表示。舉個例子:

  1. #include <stdio.h> 
  2. #include <time.h> 
  3. int main (void)  
  4.    time_t rawtime = 10;//time(NULL)獲取當前時間戳 
  5.    struct tm info; 
  6.    //轉為tm結構 
  7.    localtime_r( &rawtime,&info); 
  8.    //轉為字符串 
  9.    printf("時間為: %s\n", asctime(&info)); 
  10.    return 0; 

運行結果:

  1. 時間為: Thu Jan  1 08:00:10 1970 

在這里,我給rawtime設置為10,從打印結果來看也知道是正確的了。(注意,由于我們的時區(qū)為東八區(qū),所以得到的時間是八點。)

當然這里的內容暫時不展開,主要關注time_t。

然而實際上,time_t到底是什么?

通常,time_t直接或者間接被定義為下面這樣:

  1. typedef long time_t 

我們知道,在32位程序下面,long占用四個字節(jié)空間:

  1. #include<stdio.h> 
  2. #include <limits.h> 
  3. int main(void) 
  4.     printf("long size:%zd\n",sizeof(long)); 
  5.     printf("long max:%ld\n",LONG_MAX); 
  6.     return 0; 

編譯運行:

  1. $ gcc -m32 -o main main.c 
  2. $ ./main 
  3. 2147483647 

可以看到,對于32位程序而言,long的最大值為2147483647。

溢出引發(fā)的問題

也就是說,一旦時間戳的值大于四字節(jié)的LONG_MAX,time_t將會無法正確存儲這個時間戳。

舉例來說,最開始的程序編譯為32位程序,修改rawtime的值為2147483648,運行結果為(注意,溢出的結果是未定義的):

  1. #include <stdio.h> 
  2. #include <time.h> 
  3. int main (void)  
  4.    time_t rawtime = 2147483648;//time(NULL)獲取當前時間戳 
  5.    struct tm info; 
  6.    //轉為tm結構 
  7.    localtime_r( &rawtime,&info); 
  8.    //轉為字符串 
  9.    printf("時間為: %s", asctime(&info)); 
  10.    return(0); 

然后我們編譯運行:

  1. $ gcc -m32 -o main main.c 
  2. warning: this decimal constant is unsigned only in ISO C90 [enabled by default] 
  3. $ ./main 
  4. 間為: Sat Dec 14 04:45:52 1901 

首先編譯的時候也有警告,原因在于2147483649無法使用time_t來表示,我們運行之后,也發(fā)現(xiàn)結果出乎我們的意料,它竟然是一個1901年的時間!

2038問題

那這和2038有什么關系呢?

編譯為64位程序我們再次運行就會發(fā)現(xiàn):

  1. 間為: Tue Jan 19 11:14:08 2038 

這個4字節(jié)整型表示的時間戳值只能表示到北京時間2038年1月19日11時14分07秒,一旦到了這時間之后,這些32位程序就可能運行異常,因為它們無法將此時間正確的識別為2038年,而可能會依個別實現(xiàn)而跳回1970年或1901年。

總結

到此,想必你已經很清楚了。由于在32位程序中,time_t最大值為2147483647,即最多表示到北京時間2038年1月19日11時14分07秒,因此在此之后就會出現(xiàn)異常。

而如果使用64位整型,則可以記錄至約2900億年后的292,277,026,596年12月4日15:30:08,星期日(UTC)。

當然,如果采用無符號整型,這個錯誤會被延后到 2106 年。到那時,還會有32位的程序在運行嗎?

2038問題只是一個引子,實際上在程序中有很多現(xiàn)在不會溢出而將來可能溢出的問題,你會關注嗎?

 

責任編輯:趙寧寧 來源: 編程珠璣
相關推薦

2020-10-22 14:27:39

Linux修復系統(tǒng)

2020-07-27 07:55:51

條件概率

2017-05-18 13:23:06

機器學習強化學習分類問題

2021-03-20 22:46:22

IaaSSaaSPaaS

2024-11-04 10:28:08

2017-08-17 13:26:34

機器學習監(jiān)督學習強化學習

2023-08-08 12:36:59

2023-09-01 13:49:00

內存進程線程

2024-12-09 09:30:00

適配器模式設計模式代碼

2020-07-14 14:59:00

控制反轉依賴注入容器

2017-12-19 21:29:58

物聯(lián)網區(qū)塊鏈大數(shù)據(jù)

2018-03-13 11:34:11

物聯(lián)網采購技術

2023-01-26 19:52:30

2022-09-07 07:05:25

跨域問題安全架構

2015-01-23 10:17:23

DCIM數(shù)據(jù)中心運營與管理

2020-03-23 07:15:35

物聯(lián)網IOT物聯(lián)網技術

2019-12-23 11:03:07

抽象MOVJava

2021-02-02 18:02:09

java對象數(shù)據(jù)

2021-02-08 21:07:47

JavaCAS機制

2020-11-20 10:51:03

云計算
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久福利一牛影视 | 日韩一区二| 国产大片黄色 | 欧美不卡视频一区发布 | 99精品一区二区三区 | 在线日韩不卡 | 国产高清无av久久 | 国产一二三区精品视频 | 欧美综合在线视频 | 国产免费观看视频 | 精品国产乱码久久久久久影片 | 欧美亚洲视频在线观看 | 成人影院午夜 | 91xxx在线观看| 99精品国产一区二区青青牛奶 | 中文字幕乱码视频32 | 国产一区视频在线 | 亚洲成人在线网 | 亚洲国产aⅴ精品 | 一区二区三区精品视频 | 国产一区二区 | 国产真实精品久久二三区 | 国产在线91 | 国产午夜精品久久久久免费视高清 | 天天操夜夜拍 | 国产区在线免费观看 | 欧美一级久久精品 | 精品国产1区2区3区 一区二区手机在线 | 日韩精品 电影一区 亚洲 | 亚洲一区二区久久 | 亚洲精品大片 | 精品久久香蕉国产线看观看亚洲 | 精品国产乱码一区二区三区 | 亚洲一二三区在线观看 | 日韩在线中文字幕 | 国产999精品久久久影片官网 | k8久久久一区二区三区 | 日韩视频中文字幕 | 草久久久| 毛片毛片毛片毛片毛片 | 日韩欧美视频 |