一、介紹
sys/time.h是C/C++語言中的一個標準頭文件,包含了與時間相關的函數和數據類型聲明。該頭文件提供了處理時間的函數和結構體,允許程序在不依賴於機器的底層特性的情況下,處理時間的相關屬性,如秒數、微秒數等。
二、數據類型
sys/time.h頭文件中包含了兩個重要的數據類型:timeval和timezone。
#include <sys/time.h>
struct timeval {
time_t tv_sec; // 秒數
suseconds_t tv_usec; // 微秒數
};
struct timezone {
int tz_minuteswest; // 距離格林威治的時區差值(分鐘數)
int tz_dsttime; // 夏令時標誌位
};
三、函數
sys/time.h中包含了一些常用的處理時間的函數:
1. gettimeofday函數
gettimeofday函數獲取當前時間,精度為微秒。
#include <sys/time.h>
int gettimeofday(struct timeval *tv, struct timezone *tz);
該函數接收兩個參數:指向timeval類型結構體的指針tv和指向timezone類型結構體的指針tz。如果只需要獲取當前時間,通常將第二個參數tz設置為NULL即可。
該函數返回0表示成功,返回-1表示失敗。
2. settimeofday函數
settimeofday函數設置系統時間。
#include <sys/time.h>
int settimeofday(const struct timeval *tv, const struct timezone *tz);
該函數接收兩個參數:指向timeval類型結構體的指針tv和指向timezone類型結構體的指針tz。
該函數返回0表示成功,返回-1表示失敗。
3. time函數
time函數獲取當前的時間戳,即從1970年1月1日0時0分0秒開啟的秒數(UTC時區)。
#include <time.h>
time_t time(time_t *t);
該函數接收一個參數:指向time_t類型結構體的指針t,該參數可傳NULL。如果不傳參,則time函數直接返回當前時間戳;如果傳參,則將當前時間戳賦值給t,並返回t的值。
該函數返回當前的時間戳。
4. localtime函數
localtime函數將一個時間戳轉化為一個當地時間結構體。
#include <time.h>
struct tm *localtime(const time_t *timep);
該函數接收一個參數:指向time_t類型結構體的指針timep。該參數表示時區為UTC的時間戳。
該函數返回一個指向tm類型結構體的指針,該結構體包含了轉化後的時間信息,包括年、月、日、時、分、秒等。
5. mktime函數
mktime函數將一個當地時間結構體轉化為時間戳。
#include <time.h>
time_t mktime(struct tm *tm);
該函數接收一個指向tm類型結構體的指針tm,其中包含了轉化前的當地時間。
該函數返回一個時區為UTC的時間戳。
四、示例代碼
下面是一個簡單的使用sys/time.h頭文件和其中函數的示例代碼:
#include <stdio.h>
#include <sys/time.h>
int main() {
struct timeval t;
gettimeofday(&t, NULL);
printf("當前時間是:%d 秒 %d 微秒\n", t.tv_sec, t.tv_usec);
time_t cur_time;
cur_time = time(NULL);
printf("當前時間戳是:%ld\n", cur_time);
struct tm *local_time;
local_time = localtime(&cur_time);
printf("當前時間是:%d-%d-%d %d:%d:%d\n", local_time->tm_year + 1900, local_time->tm_mon + 1, local_time->tm_mday, local_time->tm_hour, local_time->tm_min, local_time->tm_sec);
struct tm tm;
tm.tm_year = 2020 - 1900;
tm.tm_mon = 6 - 1;
tm.tm_mday = 2;
tm.tm_hour = 12;
tm.tm_min = 0;
tm.tm_sec = 0;
time_t t2 = mktime(&tm);
printf("2020年6月2日中午12點的時間戳是:%ld\n", t2);
return 0;
}
原創文章,作者:KDNQH,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/372568.html