Linux C编程中如何获取和使用时间戳

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(&timestamp);

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(&timestamp);

char buffer[80];

strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", timeinfo);

printf("当前时间的时间字符串:%s\n", buffer);

return 0;

}

编译运行上述代码,将会得到当前时间的格式化的时间字符串的输出结果。

操作系统标签