1. 获取时间戳
在Linux C编程中,我们可以使用time函数来获取当前时间的时间戳。time函数的原型如下:
time_t time(time_t *t);
time函数接受一个指向time_t类型的指针参数,返回一个表示从1970年1月1日0时0分0秒到现在的秒数的时间戳。如果传入的参数不为空指针,那么time函数也会将当前时间的整数秒数存储在该参数指向的内存中。
下面是一个示例代码,演示如何使用time函数获取当前时间的时间戳:
#include <stdio.h>
#include <time.h>
int main() {
time_t timestamp = time(NULL);
printf("当前时间的时间戳:%ld\n", timestamp);
return 0;
}
编译运行上述代码,将会得到当前时间的时间戳的输出结果。
2. 时间戳转换为可读格式
虽然时间戳可以表示时间的绝对值,但是对于人类来说不太友好。在实际应用中,我们通常需要将时间戳转换为可读的日期与时间格式。可以使用localtime函数将时间戳转换为一个tm结构体,然后可以通过tm结构体的成员变量得到年、月、日、时、分、秒等信息。
localtime函数的原型如下:
struct tm *localtime(const time_t *t);
localtime函数接受一个指向time_t类型的指针参数,并返回一个指向struct tm类型的指针。struct tm结构体定义如下:
struct tm {
int tm_sec; // 秒(0-59)
int tm_min; // 分钟(0-59)
int tm_hour; // 小时(0-23)
int tm_mday; // 一月中的第几天(1-31)
int tm_mon; // 月份(0-11)
int tm_year; // 年份
int tm_wday; // 星期几(0-6,周日为0)
int tm_yday; // 一年中的第几天(0-365)
int tm_isdst; // 夏令时标记
};
下面是一个示例代码,演示如何将时间戳转换为可读的日期与时间格式:
#include <stdio.h>
#include <time.h>
int main() {
time_t timestamp = time(NULL);
struct tm *timeinfo = localtime(×tamp);
printf("当前时间:%d年%d月%d日 %02d:%02d:%02d\n",
timeinfo->tm_year + 1900, timeinfo->tm_mon + 1, timeinfo->tm_mday,
timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);
return 0;
}
编译运行上述代码,将会得到当前时间的可读格式的输出结果。
3. 获取时间戳的微秒部分
除了秒的精度以外,有时候我们还需要获取到时间戳的微秒部分,以满足高精度的要求。在Linux C编程中,我们可以使用gettimeofday函数来获取当前时间的微秒数。
gettimeofday函数的原型如下:
int gettimeofday(struct timeval *tv, struct timezone *tz);
gettimeofday函数接受两个指向结构体的指针参数,第一个参数是一个struct timeval类型的指针,用来存储当前时间,第二个参数是一个struct timezone类型的指针,用来获取时区信息。
struct timeval结构体定义如下:
struct timeval {
time_t tv_sec; // 秒
long tv_usec; // 微秒
};
下面是一个示例代码,演示如何使用gettimeofday函数获取当前时间的微秒数:
#include <stdio.h>
#include <sys/time.h>
int main() {
struct timeval tv;
gettimeofday(&tv, NULL);
printf("当前时间的微秒数:%ld\n", tv.tv_usec);
return 0;
}
编译运行上述代码,将会得到当前时间的微秒数的输出结果。
4. 格式化时间字符串
除了使用tm结构体将时间戳转换为可读格式以外,我们还可以使用strftime函数将时间戳格式化为自定义的时间字符串。
strftime函数的原型如下:
size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr);
strftime函数接受四个参数,第一个参数是一个指向字符的指针,用来存储格式化的时间字符串,第二个参数是存储时间字符串的缓冲区的大小,第三个参数是一个格式化字符串,用来指定输出的时间字符串的格式,第四个参数是一个tm结构体指针,用来指定格式化的时间。
格式化字符串可以包含一些标识符,这些标识符会被替换为相应的时间信息。一些常用的时间格式标识符包括:
%Y:四位数的年份
%m:两位数的月份(01-12)
%d:两位数的日期(01-31)
%H:两位数的小时(00-23)
%M:两位数的分钟(00-59)
%S:两位数的秒数(00-59)
下面是一个示例代码,演示如何使用strftime函数将时间戳格式化为时间字符串:
#include <stdio.h>
#include <time.h>
int main() {
time_t timestamp = time(NULL);
struct tm *timeinfo = localtime(×tamp);
char buffer[80];
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", timeinfo);
printf("当前时间的时间字符串:%s\n", buffer);
return 0;
}
编译运行上述代码,将会得到当前时间的格式化的时间字符串的输出结果。