c语言标准库详解(十四):时间函数time.h

c语⾔标准库详解(⼗四):时间函数time.h
c语⾔标准库详解(⼗四):时间函数<time.h>
概述
头⽂件<time.h>中声明了⼀些处理⽇期与时间的类型和函数。其中的⼀些函数⽤于处理当地时间,因为时区等原因,当地时间与⽇历时间可能不相同。clock_t和time_t是两个表⽰时间的算数类型,struct tm⽤于保存⽇历时间的各个构成部分。
struct tm
结构tm中各成员的⽤途及取值范围如下所⽰:
成员名称涵义
int tm_sec;从当前分钟开始经过的秒数(0, 61)
int tm_min;从当前⼩时开始经过的分钟数(0, 59)
int tm_hour;从午夜开始经过的⼩时数(0, 23)
int tm_mday;当⽉的天数(1, 31)
msinfoint tm_mon;从 1 ⽉起经过的⽉数(0, 11)
int tm_year;从 1900 年起经过的年数
int tm_wday;从星期天起经过的天数(0, 6)
int tm_yday;从 1 ⽉ 1 ⽇起经过的天数(0, 365)
int tm_isdst;夏令时标记 (巨坑)
使⽤夏令时,tm_isdst的值为正,否则为0.如果该信息⽆效,则其值为负。
clock()函数
clock_t clock(void)
clock 函数返回程序开始执⾏后占⽤的处理器时间。如果⽆法获取处理器时间,则返回值为-1。clock()/CLOCKS_PER_SEC 是以秒为单位表⽰的时间。
time()函数
time_t time(time_t *tp)
time函数返回当前⽇历时间。如果⽆法获取⽇历时间,则返回值为-1。 如果tp不是NULL, 则同时将返回值赋给*tp。
difftime()函数
double difftime(time_t time2, time_t time1)
difftime 函数返回 time2-time1 的值(以秒为单位)。
mktime()函数
time_t mktime(struct tm *tp)
mktime 函数将结构*tp 中的当地时间转换为与 time 表⽰⽅式相同的⽇历时间,结构中各成员的值位于上⾯所⽰范围之内。mktime 函数返回转换后得到的⽇历时间;如果该时间不能表⽰,则返回-1。
下⾯ 4 个函数返回指向可被其它调⽤覆盖的静态对象的指针。
asctime()
char*asctime(const struct tm *tp)
asctime函数将结构*tp中的时间转换为下列所⽰的字符串形式:
Sun Jan 3 15:14:13 1988\n\0
ctime()
char*ctime(const time_t *tp)
ctime 函数将结构*tp 中的⽇历时间转换为当地时间。它等价于下列函数调⽤:
asctime(localtime(tp))
gmtime()
struct tm *gmtime(const time_t *tp)
gmtime 函数将*tp 中的⽇历时间转换为协调世界时(UTC)。如果⽆法获取 UTC,则该函数返回 NULL。函数名字 gmtime 有⼀定的历史意义。
localtime()
struct tm *localtime(const time_t *tp)
localtime 函数将结构*tp 中的⽇历时间转换为当地时间。
strftime()函数
size_t strftime(char*s, size_t smax,const char*fmt,const struct tm *tp)
strftime 函数根据 fmt 中的格式把结构*tp 中的⽇期与时间信息转换为指定的格式,并存储到 s 中,其中 fmt 类似于 printf 函数中的格式说明。普通字符(包括终结符’\0’)将复制到 s 中。每个%c 将按照下⾯描述的格式替换为与本地环境相适应的值。最多 smax 个字符写到 s 中。strftime 函数返回实际写到 s 中的字符数(不包括字符’\0’);如果字符数多于smax,该函数将返回值 0。
fmt 的转换说明及其含义如下所⽰:
模式涵义
%a⼀星期中各天的缩写名
%A⼀星期中各天的全名
%b缩写的⽉份名
%B⽉份全名
%c当地时间和⽇期表⽰
%d⼀个⽉中的某⼀天(01-31)
%H⼩时(24 ⼩时表⽰)( 00-23)
%I⼩时(12 ⼩时表⽰)( 01-12)
%j⼀年中的各天(001—366)
%m⽉份(01-12)
%M分钟(00-59)
%p与 AM 与 PM 相应的当地时间等价表⽰⽅法
%S秒(00-61)
%U⼀年中的星期序号(00-53,将星期⽇看作是每周的第⼀天)
%w⼀周中的各天(0-6,星期⽇为 0)
%W⼀年中的星期序号(00-53,将星期⼀看作是每周的第⼀天)
模式涵义
%x当地⽇期表⽰ %X 当地时间表⽰
%y不带世纪数⽬的年份(00-99)
%Y带世纪数⽬的年份
%Z时区名(如果有的话)
%%%本⾝
⽰例
time()函数
代码:
#include <stdio.h>
#include <time.h>
int main ()
{
time_t seconds;
seconds =time(NULL);
printf("⾃ 1970-01-01 起的⼩时数 = %ld\n", seconds/3600);
return(0);
}
输出:
PS G:\CSAPP>&'c:\Users\swy\.vscode\extensions\ms-vscode.cpptools-0.27.1\debugAdapters\''--stdin=Microsoft-MIEngi ne-In-1fpkwzqc.3l4''--q''--stderr=Microsoft-MIEngine-Error-cvmhkdqs.3yo''--pid=''--dbgExe=G:\x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0\mingw64\''--interpreter=mi'
⾃ 1970-01-01 起的⼩时数= 441350
PS G:\CSAPP>
mktime()函数
代码:
#include <stdio.h>      /* printf, scanf */
#include <time.h>      /* time_t, struct tm, time, mktime */
int main ()
{
time_t rawtime;
struct tm * timeinfo;
int year, month ,day;
const char* weekday[]={"周⽇","周⼀","周⼆","周三","周四","周五","周六"};
/* ⽤户输⼊⽇期 */
printf ("年: ");fflush(stdout); scanf ("%d",&year);
printf ("⽉: ");fflush(stdout); scanf ("%d",&month);
printf ("⽇: ");fflush(stdout); scanf ("%d",&day);
/* 获取当前时间信息,并修改⽤户输⼊的输⼊信息 */
time (&rawtime );
timeinfo = localtime (&rawtime );
timeinfo->tm_year = year -1900;
timeinfo->tm_mon = month -1;
timeinfo->tm_mday = day;
/* 调⽤ mktime: timeinfo->tm_wday  */
mktime ( timeinfo );
printf ("那⼀天是:%s\n", weekday[timeinfo->tm_wday]);
return0;
}
输出:
PS G:\CSAPP>&'c:\Users\swy\.vscode\extensions\ms-vscode.cpptools-0.27.1\debugAdapters\''--stdin=Microsoft-MIEngi ne-In-hs1wftpx.ln1''--stdout=Microsoft-MIEngine-Out-fwpne1rj.vso''--stderr=Microsoft-MIEngine-Error-emg4
z14w.3oo''--pid=Microsoft-MIEngine-Pid-1qlw 2j4y.5ki''--dbgExe=G:\x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0\mingw64\''--interpreter=mi'
年: 1919
⽉: 8
⽇: 10
那⼀天是:周四
PS G:\CSAPP>
asctime()函数
代码:
#include <stdio.h>
#include <string.h>
#include <time.h>
int main()
{
struct tm t;
<_sec    =10;
<_min    =10;
<_hour  =6;
<_mday  =25;
<_mon    =2;
<_year  =89;
<_wday  =6;
puts(asctime(&t));
return(0);
}
输出:
PS G:\CSAPP>&'c:\Users\swy\.vscode\extensions\ms-vscode.cpptools-0.27.1\debugAdapters\''--stdin=Microsoft-MIEngi ne-In-j4vkw4tt.gfk''--stdout=Microsoft-MIEngine-Out-40wpjdv3.tws''--stderr=Microsoft-MIEngine-Error-bxob5we5.igw''--pid=Microsoft-MIEngine-Pid-wr3pq p14.m0m''--dbgExe=G:\x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0\mingw64\''--interpreter=mi'
Sat Mar 25 06:10:10 1989
PS G:\CSAPP>
注意:以上代码在Visual Studio中会报错,建议在vs code上配合MinGW使⽤
clock()函数
代码:
#include <time.h>
#include <stdio.h>
int main()
{
clock_t start_t, end_t;
double total_t;
int i;
start_t =clock();
printf("程序启动,start_t = %ld\n", start_t);
printf("开始⼀个⼤循环,start_t = %ld\n", start_t);
for(i=0; i<10000000; i++)
{
}
end_t =clock();
printf("⼤循环结束,end_t = %ld\n", end_t);
total_t =(double)(end_t - start_t)/ CLOCKS_PER_SEC;
printf("CPU 占⽤的总时间:%f\n", total_t  );
printf("程序退出...\n");
return(0);
}
输出:
PS G:\CSAPP>&'c:\Users\swy\.vscode\extensions\ms-vscode.cpptools-0.27.1\debugAdapters\bin\Wi
<''--stdin=Microsoft-MIEngi ne-In-ejz5bknr.jgc''--stdout=Microsoft-MIEngine-Out-mjuwamom.pro''--stderr=Microsoft-MIEngine-Error-o4f1uase.bul''--pid=Microsoft-MIEngine-Pid-tp4j4 yim.cvp''--dbgExe=G:\x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0\mingw64\''--interpreter=mi'
程序启动,start_t = 103
开始⼀个⼤循环,start_t = 103
⼤循环结束,end_t = 121
CPU 占⽤的总时间:0.018000
程序退出...
PS G:\CSAPP>
ctime()函数
代码:
#include <stdio.h>
#include <time.h>
int main ()
{
time_t curtime;
time(&curtime);
printf("当前时间 = %s",ctime(&curtime));
return(0);
}
输出:
PS G:\CSAPP>&'c:\Users\swy\.vscode\extensions\ms-vscode.cpptools-0.27.1\debugAdapters\bin\Wi
<''--stdin=Microsoft-MIEngi ne-In-pentcl00.h5j''--stdout=Microsoft-MIEngine-Out-5xgbuim5.vis''--stderr=Microsoft-MIEngine-Error-xjkllr0g.cah''--pid=Microsoft-MIEngine-Pid-hu5khluv .d4h''--dbgExe=G:\x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0\mingw64\''--interpreter=mi'
当前时间= Thu May 07 22:16:09 2020
PS G:\CSAPP>
difftime()函数
代码:
#include <stdio.h>
#include <time.h>
#ifdef _WIN32
#include <Windows.h>
#else
#include <unistd.h>
#endif
int main ()
{
time_t start_t, end_t;
double diff_t;
printf("程序启动...\n");
time(&start_t);
printf("休眠 5 秒...\n");
sleep(5);
time(&end_t);
diff_t =difftime(end_t, start_t);
printf("执⾏时间 = %f\n", diff_t);
printf("程序退出...\n");
return(0);
}
输出:

本文发布于:2024-09-23 15:28:03,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/380576.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:时间   函数   转换   返回   程序   开始
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议