一、介绍
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/n/372568.html