Linux获取时间的方法

统计了一下Linux C下获取时间的几种方法,如下:

0、以下代码所需头文件

#include 
#include 
#include 
#include 
#include 

1、获取年月日时分秒

/* 获取年月日时分秒 */
void get_time_ymdhs()
{
    time_t t;
    struct tm *p;

    time(&t);
    p = gmtime(&t);

    printf("%d\n", 1900 + p->tm_year); /* 年, p->tm_year是从1900年作为开始点, 例如今年是2019年,p->tm_year的值就是119, 所以加上1900 */
    printf("%d\n", 1 + p->tm_mon); /* 月, p->tm_mon的范围是0-11, 所以加1 */
    printf("%d\n", p->tm_mday); /* 日,p->tm_mday范围是1-31 */
    printf("%d\n", 8 + p->tm_hour); /* 时,获取的是世界时, 我们处于东八区,相差8个小时 */
    printf("%d\n", p->tm_min); /* 分 */
    printf("%d\n", p->tm_sec); /* 秒 */
    printf("%d\n", p->tm_yday); /* 从1月1日开始至今的天书,范围是0~365 */
}

gmtime获取世界时的时间,即格林威治(GMT)时间,所以要对时间加上时区的时差

2、格式化输出年月日时分秒
下面的几种方式是输出格式化过的时间,目前使用到的情况比较少

/* 格式化时间字符串格式为:Www Mmm dd hh:mm:ss yyyy */
void asctime_get_time()
{
    time_t t;
    struct tm *p;

    time(&t);
    p = gmtime(&t);

    p->tm_hour += 8; /* 获取的是世界时,东八区要+8 */

    printf("%s\n", asctime(p));
}
/* 格式化时间字符串格式为:Www Mmm dd hh:mm:ss yyyy */
void ctime_get_time()
{
    time_t t;
    time(&t);

    printf("%s\n", ctime(&t)); /* 打印的是当前时区的时间 */
}
/* 格式化时间字符串格式为:Www Mmm dd hh:mm:ss yyyy */
void localtime_get_time()
{
    time_t t;
    struct tm *p;

    time(&t);
    p = localtime(&t); /* 获取的是当前时区的时间 */

    printf("%s\n", asctime(p));
}

3、多用于统计程序执行时间的几种时间获取方式

/* 获取微秒级(百万分之一秒)时间 */
void get_microsecond_time()
{
    struct timeval tv;
    struct timezone tz;
    gettimeofday(&tv, &tz); /* tz一般传NULL */

    printf("sec: %ld\n", tv.tv_sec); /* 秒 */
    printf("usec: %ld\n", tv.tv_usec); /* 微秒 */
    printf("tz_minuteswest: %d\n", tz.tz_minuteswest); /* 格林威治时间往西方的时差,一般用不上 */
    printf("tz_dsttime: %d\n", tz.tz_dsttime); /* DST 时间的修正方式,一般用不上 */
}
/* 获取纳秒级(十亿分之一秒)时间 */
void get_nanosecond_time()
{
    struct timespec ts;
    clock_gettime(CLOCK_REALTIME, &ts);

    printf("sec: %ld\n", ts.tv_sec); /* 秒 */
    printf("nsec: %ld\n", ts.tv_nsec); /* 纳秒 */
}

时间单位换算如下:

#define SECOND 1 /* 1秒 */
#define MILLISECOND 1000 /* 1秒换算毫秒 */
#define MICROSECOND 1000 * 1000 /* 1秒换算微秒 */
#define NANOSECOND 1000 * 1000 * 1000 /* 1秒换算纳秒 */

你可能感兴趣的:(C)