C语言-获取系统时间

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

目录

1.静态打印系统时间

1.要了解的知识

1.1 time_t 类型

1.1.2struct tm 类型

1.1.3 time()函数

1.2显示系统时间函数

1.2.1 localtime()函数---显示当前时区的时间

1.2.2 ctime()函数---以特定方式显示当前时间信息

1.2.3 asctime()函数---将包含当前日期时间信息的tm*类型的数据以字符串形式打印

1.2.4gmtime()函数---显示格林威治标准时间

1.2.5 mktime()函数---将tm*类型的指针转化为一个时间戳【秒数】

2.计算程序运行的时间

2.1预备知识点

2.1.1 clock_t 类型

2.1.2 clock()函数

2.1.3 CLOCKS_PER_SEC

2.2计算程序运行的时间

3.动态打印系统的时间

3.1利用Sleep延时函数

3.2C语言定时器方式


1.静态打印系统时间

如果要实现静态打印系统时间的效果,首先来认识几个时间类型和时间函数

在后续的实时显示系统时间也会用到该部分的一些知识

1.要了解的知识

1.1 time_t 类型

time_t 类型是最基本的时间类型

本质是无符号长整型(unsigned long),适合用来存储与显示时间相关的变量

1.1.2struct 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,使用时需+1处理
    int tm_year;  // 年,使用时需+1970
    int tm_wday;  // 周,范围0-6,使用时需+1
    int tm_yday;  // 从1月1日起,今天是今年的第几天
    int tm_isdst; // daylight savings time flag---夏令时标志,判断日历时间是否是夏令时时间
};

例如:使用localtime函数可以得到一个指向tm类型的tm*型的指针,该指针指向的数据包含了当前时间的一些数据,包括年月日等

1.1.3 time()函数

函数原型:time_t time(time_t* timer)     //获取时间戳【也就是秒数】

使用方法:传一个time_t指针 类型的参数进去,返回一个time_t的返回值

如果传空指针进去,返回的数值是从1970年1月1日 00:00:00秒 截止到程序运行时经过的秒数

如果不传空指针进去,举例

time_t start;

time(&start);   //time函数的返回值就存到start里面了

    time_t timer0;
	timer0= time(NULL);
	printf("%lld\n", timer0);
    return 0;

1.2显示系统时间函数

1.2.1 localtime()函数---显示当前时区的时间

函数原型:struct tm* localtime(const time_t* timer)    //将时间戳转化为当地时区的时间

使用方法:传进去一个time_t指针类型的参数,返回一个与此参数对应的时间结构体struct tm*的指针。const是用来修饰参数指针不被修改;

通俗点就是:使用time()函数,可以返回一个时间戳【秒数】,定义一个time_t指针类型的变量ptimer指向这个时间戳,将ptimer作为参数传进localtime()函数,可以得到一个tm*类型的指针plocaltime,plocaltime指向的数据包括了当地时区的时间信息,包括年月日时分秒等;

#define _CRT_SECURE_NO_WARNINGS
#include <time.h>
#include <stdio.h>


int main()
{
	time_t timer0;
	timer0= time(NULL);
	printf("%lld\n", timer0);
	struct tm* plocaltime = localtime(&timer0);
	printf("\n%d-%d-%d", plocaltime->tm_year + 1900, plocaltime->tm_mon + 1, plocaltime->tm_mday);
	printf(" %d:%d:%d\n",plocaltime->tm_hour,plocaltime->tm_min,plocaltime->tm_sec);
    return 0;
}

简而言之:将时间戳转化为当地的日历时间

1.2.2 ctime()函数---以特定方式显示当前时间信息

函数原型:char* ctime(time_t* timer);    //将时间戳转化为一个表示当前日期时间的字符串

使用方法:将time函数返回值-时间戳【秒数】作为参数传递给ctime函数,返回一个指向以特定方式表示当前日期时间的字符串的字符串指针,然后将字符串打印出来即可

特定的打印格式为:周 月 日 时 分 秒 年

#define _CRT_SECURE_NO_WARNINGS
#include <time.h>
#include <stdio.h>
int main()
{
	time_t timer0;
	timer0= time(NULL);
	char* pctime = ctime(&timer0);
	printf("\n%s\n", pctime);
    return 0;
}

1.2.3 asctime()函数---将包含当前日期时间信息的tm*类型的数据以字符串形式打印

函数原型:char* asctime(struct tm* ptime)

使用方式:使用time()函数获取时间戳timer0,再使用localtime()函数将此时间戳转化为一个指向的包含当地时区时间信息的tm*类型的指针plocaltime,将此指针传递给asctime函数,以字符串的形式打印其包含的时间信息;

字符串的格式与ctime函数打印的格式相同;

#define _CRT_SECURE_NO_WARNINGS
#include <time.h>
#include <stdio.h>

int main()
{
	time_t timer0;
	timer0= time(NULL);
	struct tm* plocaltime = localtime(&timer0);
    char* pasctime = asctime(plocaltime);
    printf("\n%s\n", pasctime);
    return 0;
}

1.2.4gmtime()函数---显示格林威治标准时间

localtime函数和ctime函数得到的都是当地时区的时间

而gmtime函数得到的是格林威治标准时间【UTC】

函数原型:struct tm* gmtime(time_t* timer);   //得到UTC时间

函数使用:函数使用几乎与localtime函数一模一样,只是函数名不同;

1.2.5 mktime()函数---将tm*类型的指针转化为一个时间戳【秒数】

这个函数的作用与我们的目标正好相反,它是将指向包含当前时区时间信息的tm*类型的指针转化为是时间戳,与localtime函数的作用正好相反

函数原型:time_t mktime(struct tm* ptime);   //得到/返回一个包含当地时区信息的时间戳

#define _CRT_SECURE_NO_WARNINGS
#include <time.h>
#include <stdio.h>

int main()
{
	time_t timer0;
	timer0= time(NULL);
	printf("%lld\n", timer0);
	struct tm* plocaltime = localtime(&timer0);
    time_t time1;
    time1 = mktime(plocaltime);
    printf("\n%lld\n", time1);
    return 0;
}

以上函数使用汇总:

#define _CRT_SECURE_NO_WARNINGS
#include <time.h>
#include <stdio.h>

int main()
{
	time_t timer0;
	timer0= time(NULL);
	printf("%lld\n", timer0);
	struct tm* plocaltime = gmtime(&timer0);
	printf("\n%d-%d-%02d", plocaltime->tm_year + 1900, plocaltime->tm_mon + 1, plocaltime->tm_mday);
	printf(" %d:%d:%d\n",plocaltime->tm_hour,plocaltime->tm_min,plocaltime->tm_sec);
	char* pctime = ctime(&timer0);
	printf("\n%s\n", pctime);
    char* pasctime = asctime(plocaltime);
    printf("\n%s\n", pasctime);
    time_t time1;
    time1 = mktime(plocaltime);
    printf("\n%lld\n", time1);
    return 0;
}

执行结果:

2.计算程序运行的时间

2.1预备知识点

2.1.1 clock_t 类型

只需要了解这个时间类型即可

本质也是无符号长整型(unsigned long),适合用来存储与CPU时间相关的变量

2.1.2 clock()函数

函数原型:clock_t clock(void);   

//得到 程序开始执行到调用该函数执行时经过的CPU计时单元

函数解释:从函数启动到执行到该函数占用CPU的时间,返回值并不是简单的秒或者毫秒,而是两者之间经过的CPU时钟计时单元(clock tick)数,若返回值错误,则返回-1(有时候,使用前需要先判断函数返回值是否有效);

2.1.3 CLOCKS_PER_SEC

标准c的time.h头函数中宏定义的一个常数,表示一秒钟内CPU运行的时钟周期【计时单元】数,用于将clock ()函数的结果转化为以秒为单位的量,这个量的具体值是与操作系统相关的

CPU时钟计时单元(clock tick)数 / 该值 = 经过的秒数

2.2计算程序运行的时间

思路:

1.首先定义两个clock_t 类型的变量 start 、end,用来接收clock函数的返回值

2.在程序开始的地方和末尾调用clock函数

3.将end-start 【进过的时钟计时单元】的值转化为经过的秒数

#define _CRT_SECURE_NO_WARNINGS
#include <time.h>
#include <stdio.h>

int main()
{
    clock_t start, end;
    start = clock();
    for (unsigned int i = 0; i < 50000; i++)
    {
        printf("\n hskwcy!\n");
    }
    end = clock();
    printf("\n循环执行的时间-->%0.3f\n", (double)(end - start) / CLOCKS_PER_SEC); 
    
    //将clock_t类型强制转化为double类型
    // 
    //%f表示打印double类型的数据  %.3f表示只打印小数点后3位的值
}

3.动态打印系统的时间

3.1利用Sleep延时函数

思路:

1.time函数可以得到此时的时间戳,写一个循环函数,一直获取实时的时间戳

2.使用localtime函数将时间戳转化为包含当前时间信息的tm类型的数据,并打印出来

3.利用Sleep函数,延时1000ms后,再打印时间戳更新后的时间

代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
#include <windows.h>
int main()
{
	while (1)
	{
		time_t timer;
		time(&timer);
		struct tm* ptimer = localtime(&timer);
		printf("当前系统时间->%d:%d:%02d---有四秒误差\n", ptimer->tm_hour, ptimer->tm_min, ptimer->tm_sec);
		Sleep(1000);
		system("cls");
	}
	return 0;
}

但是会有四秒的误差,不知道是哪里的原因

3.2C语言定时器方式

思路:

1.设置一个静态clock_t的初始值starttime,静态变量初始化为0

2.定义一个clock_t类型的变量endtime,end-starttime的值就是两者之间经过的CPU时钟计时单元数,当值等于CLOCKS_PER_SEC时,说明时间过了一秒,开始执行显示时间的程序

3.将starttime的值更新为endtime

4.当新的endtime-新的starttime等于CLOCKS_PER_SEC时,说明又过了一秒,清屏+显示新的时间,如此循环往复

5.这样的话,不影响主循环其它程序的执行

6.如果想在定时器内同时完成几个时间,可以传不同的时间(duration),但是记得要定一个starttime的数组,来分别存储不同计时模式下endtime的值

6.但是缺点是:当主程序有scanf函数时,程序被卡在scanf处,,无法实时更新

7.最好是采用类似于单片机中断函数那样的方式来进行实时时间的显示,但是现在我不会;

程序如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
#include <windows.h>

void gettimer(unsigned long duration,int mode)
{

	static clock_t starttime[5];
	clock_t endtime = clock();  //起始时间
	if ((unsigned int)(endtime - starttime[0]) / CLOCKS_PER_SEC >= duration)
	{
		system("cls");
		time_t timer1;
		time(&timer1);
		struct tm* ptimer1 = localtime(&timer1);
		printf("当前系统时间->%d:%02d:%02d", ptimer1->tm_hour, ptimer1->tm_min, ptimer1->tm_sec);
		starttime[0] = endtime;
	}
}
int main()
{
	while (1)
	{
		gettimer(1, 0);		
	}

}

C语言时间操作详解 time_t用来表示时间数据类型,它是一个long(长整数)类型的别名,在time.h文件中定义,表示一个日历时间,好像是从1970年1月1日0时0分0秒到现在的秒数,感兴趣的可以自己去了解一下。 阅读详情

相关推荐

C语言获取当前日期和时间

  本文介绍使用C语言获取系统当前的日期和时间,包括Linux和Windows环境下的不同函数使用。同时,使用自己编写的获取日期和时间的函数自定义实现延时函数的功能。(1)函数 void ftime(struct timeb *tp);  timeb 结构体定义: (2)函数 struct tm *localtime(const time_t *clock);  tm 结构体定义: 2、Windows下的相关函数 (1)函数 VOID GetSystemTime(LPSYSTEMTIME lpSystemT

叶落花枯的博客 1万+

如何得到系统时间

很简单的方法

qq_9855123的博客 2105

Java 获取系统时间的三种方式,总结起来

业务场景中,不乏会需要取到当前系统时间,做一些判断,比如判断某个执行过程需要花多长时间,然后将时间记录下来,返回给业务查看;或者需要或者一个唯一的值做一些表单单号,那么当前系统时间就是唯一的,可以适用,等等。那下面总结下有哪几种方式来获取

studyday1的博客 2万+

C/C++ 获取当前时间(最全方法)

C/C++获取当前时间的多种方式的详细讲解 包括C语言库,ATL模板库,WIn API方式获取时间

余识- 6万+

C语言获取系统时间函数

一些常用的C语言获取系统时间的函数

qq_51875425的博客 6127

C语言 获取系统时间

是C语言中表示时间的数据类型,通常用于存储从1970年1月1日(称为UNIX纪元)到当前时间的秒数。接下来,根据不同的编译器环境,使用不同的方法来获取系统时间。例如,你可以将一个时间戳转换为本地时间,然后提取其中的年、月、日等信息。是 C 语言中定义的一个结构体,用于表示日期和时间。这段代码是一个用于获取系统时间的函数。函数将时间信息格式化为字符串,并存储在。函数将时间信息格式化为字符串,并存储在。最终,函数将格式化后的时间字符串存储在。函数获取当前系统时间,并将其存储在。函数将其转换为本地时间

lijian2017的博客 3294

c语言自动获取系统时间,C语言中如何获取系统时间

1 使用time_t time( time_t * timer ) 精确到秒函数名: time头文件:time.h函数原型:time_t time(time_t * timer)功能: 获取当前系统时间,返回的结果是一个time_t类型,其实就是一个大整数,其值表示从CUT(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch...

weixin_42298373的博客 5865

C语言获取系统时间

C语言获取系统时间的几种方式 C语言中如何获取时间?精度如何? 1 使用time_t time( time_t * timer ) 精确到秒2 使用clock_t clock() 得到的是CPU时间 精确到1/CLOCKS_PER_SEC秒3 计算时间差使用double difftime( time_t timer1, time_t timer0 )4 使用DWORD GetTickCou

黄安的专栏 6万+

linux下c语言获取系统时间

time_t是一个大整数,表示从1970年1月1日00:00:00到当前时刻的秒数。struct tm是c/c++里的一个标准时间结构体,定义如下。 struct tm {   int tm_sec; /* 秒–取值区间为[0,59] */   int tm_min; /* 分 - 取值区间为[0,59] */   int tm_hour; /* 时 - 取值区间为[0,23

fykhlp的专栏 7201

C语言获取系统时间

-非原创,转载自网络- 利用C语言时间函数time和localtime,具体说明如下: 一、函数接口介绍: 1、time函数。 形式为time_t time (time_t *__timer); 其中time_t为time.h定义的结构体,一般为长整型。 这个函数会获取当前时间,并返回。 如果参数__timer非空,会存储相同值到__timer指向的内存中。 time函数返回的为unix时间戳,...

椰树林YSL的博客 1593

获取当前系统时间c语言,使用C语言获取当前系统时间

要想使用C语言获取当前系统时间,办法如下:需要提前准备的工作:1 #include 2 #include 3 #include 45 intmain()6 {7 time_t rawtime; //时间类型,由time.h中定义8 struct tm *timeinfo; //关于时间的结构体类型,在time.h中定义9 timeinfo = (struct tm*...

weixin_33435461的博客 1449

C语言获取系统时间的方法

C语言获取系统时间的方法: C语言中如何获取时间?精度如何?  1 使用time_t time( time_t * timer ) 精确到秒 2 使用clock_t clock() 得到的是CPU时间 精确到1/CLOCKS_PER_SEC秒 3 计算时间差使用double difftime( time_t timer1, time_t timer0 ) 4 使用DWORD GetTic

OoO__0o0的博客 952

C语言获取系统时间的几种方式

C语言获取系统时间的几种方式 C语言中如何获取时间?精度如何?  1 使用time_t time( time_t * timer ) 精确到秒  2 使用clock_t clock() 得到的是CPU时间 精确到1/CLOCKS_PER_SEC秒  3 计算时间差使用double difftime( time_t timer1, time_t timer0 )  4 使用DWORD Ge

dhy270498872的专栏 614

c语言获取当前系统日期时间,C语言获取系统当前时间

函数名: time ()头文件:time.h函数原型:time_t time(time_t * timer)功 能: 获取当前系统时间,返回的结果是一个time_t类型,其实就是一个大整数,其值表示从UTC(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。然后可以调用localtime将time_t...

weixin_36213143的博客 5741

C语言获取系统时间的几种方式 !

http://blog.csdn.net/johnny710vip/article/details/6693319 C语言中如何获取时间?精度如何?  1 使用time_t time( time_t * timer ) 精确到秒 2 使用clock_t clock() 得到的是CPU时间 精确到1/CLOCKS_PER_SEC秒 3 计算时间差使用double diffti

尚钦 3290

C语言获取系统时间的方法

C语言获取系统时间的方法 头文件:time.h 函数原型:time_t time(time_t * timer) 功能: 获取当前系统时间,返回的结果是一个time_t类型,其实就是一个大整数,其值表示从CUT(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。然后调用loca

iw1210的专栏 3642

linux c语言获取系统时间

gmtime(取得目前时间和日期)   获得 相关函数  time,asctime,ctime,localtime   表头文件  #include   定义函数  struct tm*gmtime(const time_t*timep);   函数

风之谷 3168
上一篇: C语言知识点---文件
下一篇: 设计立方体类
hskwcy
博客等级 码龄7年 28粉丝 95原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hskwcy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值