C语言从头学69——学习头文件time.h

《C语言从头学》系列文章到这一篇就算告一段落了,感谢大家的支持!过一段时间将介绍一些MFC二维绘图函数的知识,请大家继续给予支持。

在time.h头文件中定义了有关时间的数据类型、结构体、函数等,介绍如下:

1.时间类型 time_t

time_t类型表示自1970年1月1日0分0秒(1970年初)至以后某一时刻的秒数;若为负数时,则表示至以前某一时刻的秒数,time()函数的返回值就是这一类型。

2.时间结构体 struct tm

struct tm是一个数据结构,用来保存时间的各个组成部分,年、月、日、时、分、秒等。

struct tm {

int tm_sec; // 秒数 [0, 60]

int tm_min; // 分钟 [0, 59]

int tm_hour; // 小时 [0, 23]

int tm_mday; // 日期 [1, 31]

int tm_mon; // 月份 [0, 11],一月用 0 表示

int tm_year; // 距离 1900 的年数

int tm_wday; // 星期几 [0, 6],星期天用 0 表示

int tm_yday; // 距离1月1日的天数 [0, 365]

int tm_isdst; // 是否采用夏令时,1 表示采用,0 表示未采用

};

3.函数time()

功能:返回从1970年初至当前经过的秒数

使用格式一:time(参1);

参1:time_t类型指针变量(注意对变量取址)

返回值:返回值会直接写入指针变量中,不需再接收。

使用格式二:time(NULL);

返回值:使用time_t类型变量接收返回值。

说明:以上两种使用方式结果相同,区别:一个是指针,一个是变量。time函数出错时返回-1。

4.函数ctime()

功能:将time_t类型的时间值输出为英语常用时间格式

使用格式:ctime(参1);

参1:time_t类型指针变量(注意是指针)

返回值:char*类型字符串(内容为英语常用时间格式)

5.函数localtime()

功能:将time_t类型的时间形式转换为当前时区的struct tm结构形式

使用格式:localtime(参1);

参1:time_t类型时间指针变量

返回值:返回struct tm结构体变量指针

6.函数gmtime()

功能:将time_t类型的时间形式转换为UTC时间的struct tm结构形式(世界协调时,与格林威治同)

使用格式:gmtime(参1);

参1:time_t类型时间指针变量

返回值:返回struct tm结构体指针类型

7.函数asctime()

功能:将struct tm结构体对象时间格式直接输出为英语常用时间格式

使用格式:asctime(参1);

参1:struct Tm结构体时间对象

返回值:char*字符串

8.函数mktime()

功能:把struct tm结构体时间格式转换回time_t时间格式

使用格式:mktime(参1);

参1:struct tm结构体对象指针

返回值:返回time_t类型的时间

9、函数difftime()

功能:来计算两个时间之间的差

使用格式:difftime(参1,参2);

参1、参2:time_t类型的时间值(参1结束时间,参2开始时间)

返回值:double类型的时间差(单位是秒);

10、函数strftime()

功能:将struct tm结构体格式转换为自定义格式字符串并复制到指定地址

使用格式:size_t strftime(参1,参2,参3,参4);

参1:指向接收字符串的指针

参2:可以接收的最大字节数(size_t类型)

参3:格式字符串(具体见后)

参4:struct tm结构体对象

返回值:成功复制的字符串长度;失败返回-1。

参3参考内容:

%a:星期几简写 %A:星期几全拼 %b:月份的简写

%B:月份全拼 %c:日期和时间 %d:月第几天

%H:小时(24小时制) %I:小时(12小时制) %J:年第几天

%m:月数 %M:分钟 %P:AM或PM

%R:时:分 %S:秒 %U:年第几星期(周日始)

%w:星期第几天(周日始) %W:年第几星期(周一始) %x:完整年月日日期

%X:完整时分秒 %y:两位数年份 %Y:四位数年份

%Z:时区

11、函数clock()

功能:提供程序开始执行至调用该函数时的CPU时钟周期。CPU时钟周期等于频率的倒数,因此不同计算机的clock()返回值会不同,为返回可比较的时间,需要使用宏CLOCKS_PER_SEC(每秒周期数),这个宏也在time.h中定义,通过这个宏可将周期数转换成秒。

使用格式:clock(); //无参

返回值:计算机程序运行经过的CPU周期数值(clock_t类型)。

说明:

a. 一般计算时间间隔采用两次调用clock()函数,通过计算机差值得到用时;

b. clock的精度比time要高,注意在计算时差时要将相关值强转成double型。

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <stdlib.h>
#include<time.h>
#include<string.h>
#include<math.h>

int main(void)
{
    char ch[1024]; //定义一个字符数组
    int n = 0; //定义一个整形变量并赋初值
    printf("请开始输入字符:(回车结束)\n");
    while (1) //使用while循环语句
    {
        char c = getchar(); //从键盘接收一个字符并赋给字符变量c
        ch[n] = c; //字符数组依序存储输入的字符
        if (c == '\n') { break; }
        //检查到输入回车符时利用break退出while循环
        n++; //n做自增运算
    }
    printf("显示输入的内容:\n");
    for (int i = 0; i < 1024; i++)
        //根据声明的字符数组长度进行for循环
    {
        if (ch[i] == '\n')  break;
        //遇到数组中的回车符时利用break退出for循环
        if (ch[i] == '0')  continue;
        //当遇到字符0时,不显示直接进入下一循环
        printf("%c", ch[i]);
    }
    getchar();
//实验time_t类型、time()函数
    time_t t1;
    t1 = time(NULL);
    printf("1970年以来经过秒数:%lld\n", t1);//运行结果:等待用时3秒
//实验ctime()函数
    char* timeStr = ctime(&t1);
    printf("ctime输出:%s\n",timeStr);//运行结果:ctime输出:Sat Aug 10 15:23:16 2024
//实验struct tm结构体、localtime()函数、gmtime()函数
    time_t t;
    t = time(0);
    struct tm* tmLocal;
    struct tm* tmUTC;
    tmLocal = localtime(&t);
    printf("本地时间:%d年%d月%d日 %d时%d分\n", tmLocal->tm_year+1900, tmLocal->tm_mon, tmLocal->tm_mday,
        tmLocal->tm_hour, tmLocal->tm_min);//运行结果:本地时间:2024年7月10日 15时23分
    tmUTC = gmtime(&t);
    printf(" UTC时间:%d年%d月%d日 %d时%d分\n", tmUTC->tm_year + 1900, tmUTC->tm_mon, tmUTC->tm_mday,
        tmUTC->tm_hour, tmUTC->tm_min);//运行结果: UTC时间:2024年7月10日 7时23分
//实验函数asctime()
    //仍使用前边的变量t、tmLocal
    t = time(0);
    tmLocal = localtime(&t);
    char* sTime = asctime(tmLocal);
    printf("asctime函数转换结果:%s", sTime);//运行结果:asctime函数转换结果:Sat Aug 10 15:23:16 2024
//实验函数difftime()
    time_t start;
    time_t end;
    printf("按回车键开始计时...");
    getchar();
    start = time(0);
    printf("按回车键结束计时");
    getchar();
    end = time(0);
    printf("difftime函数计算的时间:%f秒\n", difftime(end, start));//运行结果:difftime函数计算的时间:0.000000秒
//实验strftime()函数
    //继续使用struct tm的tmLocal对象
    char str[128];
    strftime(str,128,"%Y年%m月%d日%H时%M分",tmLocal);
    printf("按中文习惯的时间表示:%s\n", str);//运行结果:按中文习惯的时间表示:2024年08月11日15时53分
//实验clock()函数
    clock_t st, en;
    st = clock();
    Sleep(500);
    en = clock();
    printf("用时:%f秒\n", (en - st) /(double) CLOCKS_PER_SEC);//运行结果:用时:0.511000秒
 	getchar();
	return 0;
};
相关推荐
学不动CV了7 小时前
ARM单片机启动流程(二)(详细解析)
c语言·arm开发·stm32·单片机·51单片机
猫猫的小茶馆9 小时前
【STM32】通用定时器基本原理
c语言·stm32·单片机·嵌入式硬件·mcu·51单片机
pumpkin8451410 小时前
Rust 调用 C 函数的 FFI
c语言·算法·rust
2401_8582861111 小时前
125.【C语言】数据结构之归并排序递归解法
c语言·开发语言·数据结构·算法·排序算法·归并排序
双叶83612 小时前
(C++)学生管理系统(正式版)(map数组的应用)(string应用)(引用)(文件储存的应用)(C++教学)(C++项目)
c语言·开发语言·数据结构·c++
is081514 小时前
STM32的 syscalls.c 和 sysmem.c
c语言·stm32·嵌入式硬件
学不动CV了14 小时前
数据结构---链表结构体、指针深入理解(三)
c语言·arm开发·数据结构·stm32·单片机·链表
liulilittle19 小时前
C++ i386/AMD64平台汇编指令对齐长度获取实现
c语言·开发语言·汇编·c++
V我五十买鸡腿20 小时前
顺序栈和链式栈
c语言·数据结构·笔记·算法
森焱森1 天前
水下航行器外形分类详解
c语言·单片机·算法·架构·无人机