日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C/C++ 时间知识总结

發布時間:2023/12/14 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C/C++ 时间知识总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • C/C++ 中時間的概念
  • 常用的時間庫函數
    • time()
    • asctime()
    • gmtime()
    • ctime()
    • localtime()
    • mktime()
    • strftime()
    • difftime()
  • C/C++ 獲取當前(本地)時間的方法
    • 方法一
    • 方法二
    • 方法三
    • 方法四
    • 方法五

C/C++ 中時間的概念

Unix 時間戳(Unix timestamp),或稱 Unix 時間(Unix time)、POSIX 時間(POSIX time),是一種時間表示方式,定義為從格林威治時間1970年01月01日00時00分00秒起至現在的總秒數。time_t 就是用來存儲該數的一個類型,它是 unsigned long 類型。使用64位二進制數字表示時間的系統,最多可以使用到格林威治時間292,277,026,596年12月04日15時30分08秒。如果想要更精確一點,可以用結構 struct timeval,它可以精確到微秒:

struct timeval {long tv_sec; // 秒long tv_usec; // 微秒 };

而直接存儲年月日時分秒等的是一個結構體:

struct tm {int tm_sec; // 秒,正常范圍0-59, 允許至61int tm_min; // 分鐘,0-59int tm_hour; // 小時, 0-23int tm_mday; // 日,一個月中的第幾天,1-31int tm_mon; // 月,從一月算起,0-11,1 + p->tm_mon;int tm_year; // 年,從1900至今已經多少年,1900 + p->tm_year;int tm_wday; // 星期,一周中的第幾天,從星期日算起,0-6int tm_yday; // 從今年1月1日到目前的天數,范圍0-365int tm_isdst; // 日光節約時間的旗標 };

常用的時間庫函數

常用的時間函數都包含在頭文件 time.h/ctime(C/C++ 版本)中。

time()

time_t time(time_t *ptr);

該函數返回得到當前日歷時間或者設置日歷時間,日歷時間即自格林威治時間(1970-01-01 00:00:00 UTC)起經過的時間,單位為秒。ptr 是一個指向類型為 time_t 對象的指針。如果 ptr 不為空,則返回值存儲在變量 ptr 中。一般給 ptr 傳遞0或者 NULL 值,如果傳遞的是非空地址,也能得到當前的日歷時間。

time_t t1 = time(0); time_t t2 = time(NULL); // 等價語句,三個對象存儲的都是同一個數值 time_t t3; time(&t3);

asctime()

char *asctime(const struct tm *timeptr);

該函數接受一個指向 tm 結構類型常量對象的指針 timeptr,返回一個指向字符串的指針,該字符串包含了可讀格式的日期和時間信息
wmdh:m:syw\ \ \ m\ \ \ d\ \ \ h:m:s\ \ \ yw???m???d???h:m:s???y其中,w 表示星期幾,m 是以字母表示的月份,d 表示一月中的第幾天,h : m : s 表示當前的時間,y 表示年份。asctime 函數常用于將結構中的信息轉換為真實世界的時間,以字符串的形式顯示。它計算得到的是世界統一時間。世界統一時間比北京時間早八個小時。比如當前北京時間是 8:41,利用 asctime 顯示的時間則為 00:41,這意味著日期也有可能會早一天。

gmtime()

struct tm *gmtime(const time_t *timer);

該函數接受一個指向 time_t 類型常量對象的指針 timer,返回一個指向 tm 結構類型的指針。它使用 timer 的值來計算 tm 的各個成員變量,得到的是協調世界時

ctime()

char *ctime(const time_t *timeptr);

該函數接受一個指向 time_t 類型常量對象的指針 timeptr,返回一個指向字符串的指針,其與 asctime() 的返回類型和格式是一樣的。這兩個函數的區別在于傳入的參數類型不一樣,而且 ctime 返回的是本地時區時間

localtime()

struct tm *localtime(const time_t *timer);

該函數接受一個指向 time_t 類型常量對象的指針 timer,返回一個指向 tm 結構類型的指針。它使用 timer 的值來計算 tm 的各個成員變量,得到的是“本地時區時間”。

mktime()

time_t mktime(struct tm *timeptr)

該函數接受一個指向 tm 結構類型常量對象的指針 timeptr,返回一個 time_t 類型的無符號整數。它的作用是將 timeptr 所指向的結構體變量轉換成自格林威治時間(1970-01-01 00:00:00 UTC)起經過的時間并返回,單位為秒,若發生錯誤返回-1。

strftime()

size_t strftime(char *str,size_t maxsize,const char *format,const struct tm *timeptr);

該函數接受一個字符串str、一個無符號整數 maxsize,一個字符串 format 以及一個指向 tm 結構類型常量對象的指針。它的作用是將 timeptr 表示的時間按照格式化規則存儲在 str 中,maxsize 用來表示復制到 str 中的最大字符個數。如果 str 的字符個數(包含空字符 ‘\0’)小于 maxsize,則函數返回其字符個數,否則返回0。

size_t 是一個與機器相關的無符號整數類型,其大小足以保證存儲內存中的任意對象。例如數組下標的類型、vector 下標的類型實際上都是 size_t。

format 是一個 C 字符串,其中包含了普通字符特殊格式說明符的任何組合。這些格式說明符由 strftime 函數識別,從而將 tm 中每個成員變量(參考前面 tm 結構中定義的各個整數)替換為相應的格式并存入 str 中。下表為格式說明符:

說明符替換為
%a縮寫的星期幾名稱,例如:Sun
%A完整的星期幾名稱,例如:Sunday
%b縮寫的月份名稱,例如:Mar
%B完整的月份名稱,例如:March
%c日期和時間表示法,例如:Sun Aug 19 02:56:02 2012
%d一月中的第幾天(01-31),例如:19
%F顯示年-月-日,例如:09-11-03
%H24 小時格式的小時(00-23),例如:14
%I12 小時格式的小時(01-12),例如:05
%j一年中的第幾天(001-366),例如:231
%m十進制數表示的月份(01-12),例如:08
%M十進制表示的分鐘數(00-59),例如:55
%pAM 或 PM 名稱,例如:PM
%r12小時的時間,例如:9
%R小時和分鐘,例如:08:29
%S秒(00-61),例如:02
%U一年中的第幾周,以第一個星期日作為第一周的第一天(00-53),例如:33
%w十進制數表示的星期幾,星期日表示為 0(0-6),例如:4
%W一年中的第幾周,以第一個星期一作為第一周的第一天(00-53),例如:34
%x標準日期串,例如:08/19/12
%X標準時間串,例如:02:50:06
%y年份的最后兩個數字(00-99),例如:01
%Y完整的年份,例如:2012
%Z時區的名稱或縮寫,若得不到時區名稱則返回空串,例如:CDT
%%一個 % 符號,例如:%

difftime()

double difftime(time_t time1, time_t time2)

該函數接受兩個 time_t 類型的無符號整數并返回它們的差值,單位為秒。

C/C++ 獲取當前(本地)時間的方法

方法一

先獲取格林威治時間,再使用 localtime 函數獲取當前時間的 tm 結構類型變量,將其格式化后存入 str 再打印:

#include <cstdio> #include <ctime>int main(void) {time_t t = time(0);char str[64];strftime(str, sizeof(str), "%Y/%m/%d %X %A 今年第%j天 %z", localtime(&t));printf("當前時間:%s", str);return 0; }

方法二

先獲取格林威治時間,使用 localtime 函數獲取當前時間的 tm 結構類型變量,再將其用 ctime 函數轉換成當前時間的字符串打印輸出:

#include <cstdio> #include <ctime>int main(void) {time_t t = time(0);struct tm *info = localtime(&t);printf("當前時間:%s", ctime(info));return 0; }

方法三

先獲取格林威治時間,使用 localtime 函數獲取當前時間的 tm 結構類型變量,然后直接依據 tm 中的成員來計算我們想要打印的內容:

#include <cstdio> #include <ctime>int main() {char wday[][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};time_t t = time(0); // 獲得time_t結構的時間,世界協調時struct tm *p;p = localtime(&t); // 轉換為 struct tm 結構的本地時間printf("%04d/%02d/%02d ", 1900 + p->tm_year, 1+ p->tm_mon, p->tm_mday); // 打印當前日期printf("%s %02d:%02d:%02d\n", wday[p->tm_wday], p->tm_hour, p->tm_min, p->tm_sec); // 打印當前時間return 0; }

方法四

使用 windows 的 API,能夠精確到毫秒級。但是因為用的是 windows 下的函數,所以換了其他操作系統就不一定能用了:

#include <cstdio> #include <windows.h>int main() {SYSTEMTIME sys;GetLocalTime(&sys);printf("%4d-%02d-%02d %02d:%02d:%02d.%03d 星期%1d",sys.wYear, sys.wMonth, sys.wDay, sys.wHour, sys.wMinute, sys.wSecond, sys.wMilliseconds, sys.wDayOfWeek);return 0; }

方法五

利用系統函數,只顯示當前的時間,不顯示年月日這些。而且還能直接修改系統時間:

#include <cstdlib>int main() {system("time");return 0; }

希望本篇博客能對你有所幫助,也希望看官能動動小手點個贊喲~~。

總結

以上是生活随笔為你收集整理的C/C++ 时间知识总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。