一、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
函数、获取当前时间、获取指定时间、获取格式化时间等方面进行了详细的阐述。对于需要获取本地时间的应用场景,可以根据自己的需求灵活运用这些方法来实现。