Linux获取时间的方法

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

0、以下代码所需头文件

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include <sys/time.h>

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秒换算纳秒 */
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值