time time_t tm用法

本文详细介绍了C语言中处理时间的常见函数,包括gmtime、time、ctime、mktime的用法,以及如何将日期转换为秒数。通过具体实例展示了如何使用这些函数进行时间的计算和格式化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近搞视频检索,涉及到很多时间的计算。顺便记录下一些基本用法。

一、gmtime用法

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define PNULL NULL
int p_time(time_t t)
{
    struct   tm  *timenow;
    if (t == -1) {
        printf("p_time input error. time = -1\n");
        return;
    }
    timenow = gmtime(&(t));
    if (timenow == PNULL) {
        return;
    }
    printf("%4d.%02d.%02d-%02d:%02d:%02d\n", \
        timenow->tm_year+1900,timenow->tm_mon+1,timenow->tm_mday,\
        timenow->tm_hour,timenow->tm_min,timenow->tm_sec);
}
void main()
{
    time_t test_time;

    time(&test_time);
    test_time = test_time + (8*60*60);

    printf("time = %lu\n", test_time);
    p_time(test_time);
}

运行结果:

root@chenwr-pc:/home/workspace/test/tmp/FAT# date
Thu Mar 28 14:52:03 CST 2019
root@chenwr-pc:/home/workspace/test/tmp/FAT# gcc time.c -o run && ./run
time = 1553784724
2019.03.28-14:52:04

作用打印出当前时间。

  1. gmtime()将参数test_time所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm 返回。
  2. Coordinated Universal Time(UTC):协调世界时,又称为世界标准时间,也就是大家所熟知的格林威治标准时间(Greenwich Mean Time,GMT)。比如,中国内地的时间与UTC的时差为+8,也就是UTC+8。美国是UTC-5。
  3. time函数用来获取机器时间(UTC)单位为秒数,所有和北京时间差8个时区,因此要加86060。最后通过gmtime来转换。

二、time函数用法

time()函数的用途是返回一个值,即格林尼治时间1970年1月1日00:00:00到当前时刻的时长,时长单位是秒。

#include <stdio.h>
#include <stdlib.h>
void main()
{
    time_t t;

    time(&t);
    printf("time = %lu\n", t);
}

运行结果:

time = 1555576546

tm结构体

struct  tm{
       int tm_sec;
       int tm_min;
       int tm_hour;
       int tm_mday;
       int tm_mon;
       int tm_year;
       int tm_wday;
       int tm_yday;
       int tm_isdst;
     }; 

三、ctime用法

函数原型: char *ctime(long time)
函数功能: 得到日历时间
函数返回: 返回字符串格式:星期,月,日,小时:分:秒,年
参数说明: time-该参数应由函数time获得
所属文件: <time.h>

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main()
{
    time_t t;

    time(&t);
    printf("date and time: %s\n", ctime(&t));
}

运行结果:

date and time: Thu Apr 18 16:43:32 2019

四、mktime用法

将时间转换为自1970年1月1日以来逝去时间的秒数,发生错误时返回-1

函数原型:time_t mktime(struct tm * timeptr);
所属文件 #include <time.h>

日期如何转成秒数实例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <string.h>
#define PNULL NULL
typedef signed long         INT32S;
int p_time(time_t t)
{
    struct   tm  *timenow;
    if (t == -1) {
        printf("p_time input error. time = -1\n");
        return;
    }
    timenow = gmtime(&(t));
    if (timenow == PNULL) {
        return;
    }
    printf("%4d.%02d.%02d-%02d:%02d:%02d\n", \
        timenow->tm_year+1900,timenow->tm_mon+1,timenow->tm_mday,\
        timenow->tm_hour,timenow->tm_min,timenow->tm_sec);
}
time_t date_to_sec(int year, int mon, int day, int hour, int min, int sec)
{
    struct tm date ;
    int time_zone = 8;

    memset(&date, 0, sizeof(date));
    date.tm_year = year-1900;
    date.tm_mon = mon-1;
    date.tm_mday = day;
    date.tm_hour = hour+time_zone;
    date.tm_min = min;
    date.tm_sec = sec;

    return mktime(&date);
}
void main()
{
    int my_time;

    my_time = date_to_sec(2019, 3, 20, 18, 10, 6);
    printf("date sec; %d\n", my_time);
    p_time(my_ime);
}

运行结果:

date sec; 1553105406
2019.03.20-18:10:06

五、参考资料

这篇把常见的关于time的函数用法整理的很清晰
c语言中time函数的用法 - wangluojisuan的专栏 - 优快云博客 https://blog.youkuaiyun.com/wangluojisuan/article/details/7045592/

struct tm 和 time_t 时间和日期的使用方法(转) - 教学博客 - 博客园 http://www.cnblogs.com/hhpjxbk/archive/2009/10/06/1578385.html

#include <stdio.h> #include <st_t_time_members.h> #include <string.h> #include "aip_common.h" int main() { time_t u4_t_time_now =time (NULL); ST tm st_t_time_members; // 改为栈分配的结构体 localtime_s(&st_t_time_members, &u4_t_time_now); // 使用安全版本 // 中文星期数组 const U1* u1p_tp_cnweeks_members[] = { "日", "一", "二", "三", "四", "五", "六" }; // 英文月份数组 const U1* u1p_tp_enmonths_members[] = { "January", "February", "March", "April", "May", "June","July", "August", "September", "October", "November", "December" }; // 英文星期数组 const U1* u1p_tp_enweeks_members[] = { "Sunday", "Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday" }; // 日文星期数组 const U1* u1p_tp_jpweeks_members[] = { "日", "月", "火", "水", "木", "金", "土" }; // 格式1:2017年9月28日 星期四 14点26分13秒 printf("格式1:%d年%d月%d日 星期%s %d点%d分%d秒\n", st_t_time_members.tm_year + 1900, st_t_time_members.tm_mon + 1, st_t_time_members.tm_mday, u1p_tp_cnweeks_members[st_t_time_members.tm_wday], st_t_time_members.tm_hour, st_t_time_members.tm_min, st_t_time_members.tm_sec); // 格式2:2017/9/28 星期四 14:26:13 printf("格式2:%d/%d/%d 星期%s %d:%02d:%02d\n", st_t_time_members.tm_year + 1900, st_t_time_members.tm_mon + 1, st_t_time_members.tm_mday, u1p_tp_cnweeks_members[st_t_time_members.tm_wday], st_t_time_members.tm_hour, st_t_time_members.tm_min, st_t_time_members.tm_sec); // 格式3:2017/9/28 星期四 2:26:13(PM) int hour12 = st_t_time_members.tm_hour % 12; if (hour12 == 0) hour12 = 12; printf("格式3:%d/%d/%d 星期%s %d:%02d:%02d(%s)\n", st_t_time_members.tm_year + 1900, st_t_time_members.tm_mon + 1, st_t_time_members.tm_mday, u1p_tp_cnweeks_members[st_t_time_members.tm_wday], hour12, st_t_time_members.tm_min, st_t_time_members.tm_sec, (st_t_time_members.tm_hour >= 12) ? "PM" : "AM"); // 格式4:Thursday, September 28, 2017 14:26:13 printf("格式4:%s, %s %d, %d %02d:%02d:%02d\n", u1p_tp_enweeks_members[st_t_time_members.tm_wday], u1p_tp_enmonths_members[st_t_time_members.tm_mon], st_t_time_members.tm_mday, st_t_time_members.tm_year + 1900, st_t_time_members.tm_hour, st_t_time_members.tm_min, st_t_time_members.tm_sec); // 格式5:2017年9月28日(木) 2:26:13(PM) printf("格式5:%d年%d月%d日(%s) %d:%02d:%02d(%s)\n", st_t_time_members.tm_year + 1900, st_t_time_members.tm_mon + 1, st_t_time_members.tm_mday, u1p_tp_jpweeks_members[st_t_time_members.tm_wday], hour12, st_t_time_members.tm_min, st_t_time_members.tm_sec, (st_t_time_members.tm_hour >= 12) ? "PM" : "AM"); return 0; } 该代码有什么会导致无法运行的错误码
08-06
#include <stdio.h> #include <time.h> #include <string.h> #include "aip_common.h" #define ZERO (0) #define DEFAULT_YEAR (1900) #define DEFAULT_MON (1) #define HALFDAY (12) U4 main() { time_t u4_t_time_now = time(NULL); struct tm st_t_time_members; localtime_s(&st_t_time_members, &u4_t_time_now); // 中文星期数组 const U1* u1p_tp_cnweeks_members[] = { "日", "一", "二", "三", "四", "五", "六" }; // 英文月份数组 const U1* u1p_tp_enmonths_members[] = { "January", "February", "March", "April", "May", "June","July", "August", "September", "October", "November", "December" }; // 英文星期数组 const U1* u1p_tp_enweeks_members[] = { "Sunday", "Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday" }; // 日文星期数组 const U1* u1p_tp_jpweeks_members[] = { "日", "月", "火", "水", "木", "金", "土" }; // 格式1:2017年9月28日 星期四 14点26分13秒 printf("格式1:%d年%d月%d日 星期%s %d点%d分%d秒\n",st_t_time_members.tm_year + (U4)DEFAULT_YEAR, st_t_time_members.tm_mon + (U4)DEFAULT_MON, st_t_time_members.tm_mday,u1p_tp_cnweeks_members[st_t_time_members.tm_wday], st_t_time_members.tm_hour, st_t_time_members.tm_min, st_t_time_members.tm_sec); // 格式2:2017/9/28 星期四 14:26:13 printf("格式2:%d/%d/%d 星期%s %d:%02d:%02d\n",st_t_time_members.tm_year + (U4)DEFAULT_YEAR, st_t_time_members.tm_mon + (U4)DEFAULT_MON, st_t_time_members.tm_mday,u1p_tp_cnweeks_members[st_t_time_members.tm_wday], st_t_time_members.tm_hour, st_t_time_members.tm_min, st_t_time_members.tm_sec); // 格式3:2017/9/28 星期四 2:26:13(PM) U4 u4_t_time_halfday = st_t_time_members.tm_hour % (U4)HALFDAY; if ( (U4)ZERO == u4_t_time_halfday) { u4_t_time_halfday = (U4)HALFDAY; } else { } const U1* ampm_str; if ((U4)HALFDAY <= st_t_time_members.tm_hour) { ampm_str = "PM"; } else { ampm_str = "AM"; } printf("格式3:%d/%d/%d 星期%s %d:%02d:%02d(%s)\n",st_t_time_members.tm_year + (U4)DEFAULT_YEAR, st_t_time_members.tm_mon + (U4)DEFAULT_MON, st_t_time_members.tm_mday,u1p_tp_cnweeks_members[st_t_time_members.tm_wday], u4_t_time_halfday, st_t_time_members.tm_min, st_t_time_members.tm_sec,ampm_str); // 格式4:Thursday, September 28, 2017 14:26:13 printf("格式4:%s, %s %d, %d %02d:%02d:%02d\n",u1p_tp_enweeks_members[st_t_time_members.tm_wday],u1p_tp_enmonths_members[st_t_time_members.tm_mon], st_t_time_members.tm_mday, st_t_time_members.tm_year + (U4)DEFAULT_YEAR,st_t_time_members.tm_hour, st_t_time_members.tm_min, st_t_time_members.tm_sec); // 格式5:2017年9月28日(木) 2:26:13(PM) if ((U4)HALFDAY <= st_t_time_members.tm_hour) { ampm_str = "PM"; } else { ampm_str = "AM"; } printf("格式5:%d年%d月%d日(%s) %d:%02d:%02d(%s)\n",st_t_time_members.tm_year + (U4)DEFAULT_YEAR, st_t_time_members.tm_mon + (U4)DEFAULT_MON, st_t_time_members.tm_mday, u1p_tp_jpweeks_members[st_t_time_members.tm_wday], u4_t_time_halfday, st_t_time_members.tm_min, st_t_time_members.tm_sec,ampm_str); return ZERO; } 给数组加上初始化函数
最新发布
08-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值