1. 程式人生 > >日期計算程式碼(1):計算當前時間前後N天

日期計算程式碼(1):計算當前時間前後N天

C語言計算當前時間前後N天可以藉助庫函式<time.h>提供的函式,先獲取當前時間從1970年開始累計的秒數,再加減N天對應的秒數,最後將秒數還原年月日時間,具體程式碼如下。

  1. #inlcude  <time.h>
  2. int main(int argc,char* argv[])
  3. {
  4. time_t lt;
  5. lt = time(NULL);
  6. long seconds =24*3600*20;//24 小時 * 小時秒 * 天數
  7. lt += seconds;//計算後N天
  8. //lt -= seconds;//計算前N天
  9. struct tm *p = localtime(&lt);
  10. printf("時間為:%d年%d月%d日%d時%d分%d秒n"
    ,
  11. p->tm_year +1900,
  12. p->tm_mon +1,
  13. p->tm_mday,
  14. p->tm_hour,
  15. p->tm_min,
  16. p->tm_sec);
  17. }

 說明:

time(NULL):返回從1970年1月1日0時0分0秒到當前時間所偏移的秒數。

localtime():將從1970年1月1日0時0分0秒到當前時間所偏移的秒數,轉化成本地時間年月日時分秒。

該方法不能計算1970年以前的時間,由於time_t資料型別(即long 型別)能表示的數值範圍有限,超出time_t的最大值之後的時間將無法表示。32位平臺可以表示的時間不能晚於2038年1月18日19時14分07秒,64位平臺能表示的最大時間為3001年1月1日0時0分0秒(不包括該時間點)。

struct tm結構如下:

  1. struct tm {
  2. int tm_sec;/* seconds after the minute - [0,59] */
  3. int tm_min;/* minutes after the hour - [0,59] */
  4. int tm_hour;/* hours since midnight - [0,23] */
  5. int tm_mday;/* day of the month - [1,31] */
  6. int tm_mon;/* months since January - [0,11] */
  7. int tm_year;/* years since 1900 */
  8. int tm_wday;/* days since Sunday - [0,6] */
  9. int tm_yday;/* days since January 1 - [0,365] */
  10. int tm_isdst;/* 是否夏令時(中國大陸不實行夏令時間) */
  11. };