您的位置:

使用localtime函数获取本地时间

一、localtime函数简介

localtime函数是用来获取本地时间的,它可以将Unix时间戳转换为本地时间:年、月、日、时、分、秒等格式,并以结构体的形式返回。它的原型如下:

struct tm * localtime (const time_t * timer);

其中,参数timer是一个指向time_t类型的指针,它表示从1970年1月1日0时0分0秒到现在所经过的秒数。而返回值是一个指向tm结构的指针。

二、获取当前时间

我们可以使用time函数获取当前时间戳,再传入localtime函数中进行转换,将返回的结果存入结构体中:

time_t t = time(NULL);
struct tm *lt = localtime(&t);
int year = lt->tm_year + 1900; // 年份要加上1900
int month = lt->tm_mon + 1; // 月份从0开始,所以要加1
int day = lt->tm_mday;
int hour = lt->tm_hour;
int minute = lt->tm_min;
int second = lt->tm_sec;

这里利用了结构体指针的取值方式,通过“->”符号获取结构体中的成员。

三、获取指定时间

我们也可以使用mktime函数将某一特定时间转换为时间戳,再传入localtime函数中进行转换,将返回的结果存入结构体中:

struct tm stm;
stm.tm_year = 2022 - 1900; // 年份要减去1900
stm.tm_mon = 8 - 1; // 月份从0开始,所以要减1
stm.tm_mday = 1;
stm.tm_hour = 8;
stm.tm_min = 30;
stm.tm_sec = 0;
time_t t = mktime(&stm);
struct tm *lt = localtime(&t);

这里需要注意,年份要减去1900,月份从0开始,所以要减1。

四、获取格式化时间

我们也可以使用strftime函数将本地时间分解出来的结构体,格式化成指定的字符串:

char str[50];
strftime(str, sizeof(str), "%Y/%m/%d %H:%M:%S", lt);
printf("%s\n", str);

这里使用了strftime函数,第一个参数是存放输出结果的字符数组,第二个参数是该数组的大小,第三个参数是格式化字符串,第四个参数是指向被格式化的时间结构体的指针。

五、小结

本文针对使用localtime函数获取本地时间这一主题,从介绍localtime函数、获取当前时间、获取指定时间、获取格式化时间等方面进行了详细的阐述。对于需要获取本地时间的应用场景,可以根据自己的需求灵活运用这些方法来实现。