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