c++中的时间处理(2)time.h库及几个time相关的函数

news2024/11/27 13:53:16

关于time.h,有人总结了这么3句话:

(1)time_t:表示距离 UTC 时间 1970-01-01 00:00:00 的秒数。也叫做日历时,类型是  long
(2)clock_t: 只用于程序计时,貌似其他的没它什么事。
(3)struct tm:通常用于存储本地时。

其中的常用函数:

(1)clock:     获取程序开始执行后占用的处理器时间,返回值clock_t。
(2)time:     获取当前系统时间(UTC时间)的time_t值。
(3)ctime:    将time_t值转换为表示本地时间的字符串。
(4)asctime:  将struct tm转换为字符串形式。
(5)localtime:将time_t转换为表示本地时间的strunct tm结构。
(6)gmttime:  将time_t值转换为表示GMT时间的字符串。
(7)mktime:   将表示本地时间的struct tm转换为time_t。
(8)strftime: 自定义把结构体tm的日期与时间信息转换为制定的格式。
(9)difftime: 得到两个日历时之间的差值。

1、clock

例子:

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

// 定义记录开始和结束时间的变量
clock_t start, stop;

// 记录函数运行时间, 单位为秒
double duration;

int main(){

    start=clock();

    MyFunction();//要进行计时的目标函数.
    
    // 记录自 main() 函数被执行开始到本次 clock() 被调用一共走过了多少个 ticks.
    stop=clock();
    
    // 将时钟打点数转换成秒数
    duration=((double)(stop-start))/CLOCKS_PER_SEC;

    return 0;
}

2、time

1970-01-01 00:00:00 +0000 (UTC).)到现在的时间值,用秒表示。

常见用法:

time_t time_seconds = time(0);

3、ctime

ctime()用来把时间数值转换成:Tue Jul 11 21:22:42 2023? 这种格式的字符串。
ctime()的函数原型如下:

char *ctime(const time_t *timep);

跟ctime()还是功能类似的函数还有下面2个(类似localtime有localtime_r, localtime_s):

char *ctime_r(const time_t *timep, char *buf);
errno_t ctime_s(char *buf, rsize_t bufsz, const time_t* timer);

举例:

#include <stdio.h>
#include <time.h>
#include <string.h>

int main()
{
	time_t now = time(0);
	printf("%s\n", ctime(&now));
	
	char buf[32];
	memset(buf, 0, sizeof(buf));
	ctime_r(&now, buf);
	printf("%s\n", buf);
}

4、asctime

函数原型:

char* asctime(struct tm * ptr)

举例:

#include <stdio.h>
#include <string.h>
#include <time.h>

int main()
{
	struct tm t;
	char str[80];
	t.tm_sec = 1;
	t.tm_min = 3;
	t.tm_hour = 7;
	t.tm_mday = 22;
	t.tm_mon = 11;
	t.tm_year = 56;
	t.tm_wday = 4;
	t.tm_yday = 0;
	t.tm_isdst = 0;
	strcpy(str, asctime(&t));
	printf("%s", str);
	
	return 0;
}

5、localtime(前面的文章详细讲述了localtime, localtime_r, localtime_s)

6、gmtime

gmtime的用法与localtime是一样的,两者不同之处在于,gmtime的话是UTC时间,而localtime的话是本地时间。

gmtime的函数原型:

struct tm *gmtime(const time_t *timep);
struct tm *gmtime_r(const time_t *timep, struct tm *result);

举例:

#include <stdio.h>
#include <time.h>
 
int main()
{
    time_t time_seconds = time(0);
    struct tm now_time;
    localtime_r(&time_seconds, &now_time);
 
    printf("%d-%d-%d %d:%d:%d\n", now_time.tm_year + 1900, now_time.tm_mon + 1,
        now_time.tm_mday, now_time.tm_hour, now_time.tm_min, now_time.tm_sec);
	
	gmtime_r(&time_seconds, &now_time);
    printf("%d-%d-%d %d:%d:%d\n", now_time.tm_year + 1900, now_time.tm_mon + 1,
        now_time.tm_mday, now_time.tm_hour, now_time.tm_min, now_time.tm_sec);	
}

结果:

可以看到,gmttime返回的时间比localtime迟8个小时。

7、mktime

localtime, gmtime把time_t转成tm,mktime的作用刚好相反,把tm转成time_t。

mktime的函数原型:

time_t mktime(struct tm *tm);

举例:

time_t t = time(0);
struct tm p;
localtime_s(&p, &t);

printf("本地时间:%d年%d月%d日 %d:%d:%d\n",
	p.tm_year + 1900, p.tm_mon + 1, p.tm_mday,
	p.tm_hour, p.tm_min, p.tm_sec);

time_t mkt = -1;
mkt = mktime(&p);
if (-1 == mkt){
	perror("mktime");
}else{
	printf("%ld second\n", mkt);
}

 8、strftime

用来格式化输出时间,比如按:"%Y%m%d %H:%M:%S" 格式输出,函数原型如下:

size_t strftime(char *s, size_t max, const char *format,const struct tm *tm);

举例:

char buf[32];
memset(buf, 0, sizeof(buf));
strftime(buf, sizeof(buf), "%y-%m-%d, %H:%M:%S", &p);
printf("%s\n", buf);

9、difftime

函数原型:

double difftime(time_t time2, time_t time1);

举例:

time_t first, second;

first = time(0);
Sleep(5000);
second = time(0);

std::cout << std::to_string(difftime(second, first)) << std::endl;

return 0;

10、gettimeofday

gettimeofday的话可以获得微秒以及时区以及夏令时等信息。记得它要包含有 #include <sys/time.h> 这个头文件的时候才可以用struct timeval 和struct timezone这两个类型。

举例:

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

int main()
{
	struct timeval tv = {0};
	struct timezone tz = {0} ;

	int ret = -1;
	ret = gettimeofday(&tv,&tz);
	if (-1 == ret )
	{
		perror("gettimeofday");
		return -1;
	}
	printf("U-SECOND = %ld\n",tv.tv_usec);
	printf("TIMEZONE = %d\n",tz.tz_minuteswest);
	printf("TIMEZONE = %d\n",tz.tz_dsttime);
}

参考:

(1)C++ time.h 库详解

(2)struct tm 和 time_t 时间和日期的使用方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/742318.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【SAP UI5 控件学习】DAY03 Input组Part III

1. Input 控件 1.1 最简单的Input控件 在UI5框架中&#xff0c;最简单的Input控件也提供了输入提示功能。当用户输入内容的时候&#xff0c;会自动匹配Input控件中所绑定的JSON模型中是数据。 Input的默认匹配规则是匹配从头匹配每一个单词 前端代码如下&#xff1a; <mv…

Django新手必看:如何创建应用和定义数据表。看完这一篇就够了

1. Django创建应用 Django 项目就是基于 Django 框架开发的 Web 应用&#xff0c;它包含了一组配置和多个应用&#xff0c;我们把应用称之为App&#xff0c;在前文中对它也做了相应的介绍&#xff0c;比如 auth、admin&#xff0c;它们都属于 APP。一个 App 就是一个 Python 包…

这7个AI软件让设计效率飞起,快来收藏

伴随着AI技术的发展&#xff0c;设计师使用AI工具来提高工作效率已成为一种趋势&#xff0c;越来越多的AI工具也出现在市场上。本文收集了市场上7个好用的AI工具推荐给大家&#xff0c;一起来看看吧&#xff01; 1、即时 AI 即时 AI是一款依赖AI技术&#xff0c;实现网页设计…

梯度(第四节)

目录 一.总结 二.l的方向余弦 三.方向导数 四.方向导数和方向余弦的联系 五.梯度 1.定义 2.性质 3.运算公式 4.例题 六.最快下降法 一.总结 上一节我们研究了数量场和矢量场的宏观特征&#xff0c;但宏观特征&#xff0c;在细节上往往无法展现事物的真正全 貌&…

Instruct2Act:使用大型语言模型将多模态指令映射到机器人动作

Instruct2Act&#xff1a;使用大型语言模型将多模态指令映射到机器人动作 基础模型在多种应用中取得了重大进步&#xff0c;包括文本到图像的生成、全景分割和自然语言处理。本文提出了一个名为Instruct2Act的框架&#xff0c;该框架利用大型语言模型将多模态指令映射为机器人…

代码随想录算法学习心得 42 | 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II...

一、买卖股票的最佳时机 链接&#xff1a;力扣 描述&#xff1a;给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算…

iOS添加测试设备报错ineligible for 14 days

2023年7月8日申请苹果个人开发账号审核通过。 2023年7月10日在苹果开发平台分别创建Certificates、Identifiers、Devices添加一台测试设备、Profiles&#xff0c;将已经准备好的项目打包上传&#xff0c;使用testflight测试app&#xff0c;使用测试设备一切顺利。 2023年7月1…

中缀表达式转前、后缀表达式

中缀表达式&#xff1a;按照人为理解的运算优先顺序进行计算&#xff0c;如ab 前缀表达式&#xff1a;运算符在括号之前&#xff0c;如ab 后缀表达式&#xff1a;运算符提在括号之后&#xff0c;如ab 解题步骤&#xff1a; ①用括号把每一个表达式括起来(可以先全部括起来后挨…

RPC分布式网络通信框架(一)—— protobuf的使用

文章目录 一、protobuf的好处二、如何创建proto三、编译生成的C类UserServiceRpcUserServiceRpc_Stub四、序列化和反序列化序列化反序列化 粘包问题解决调用者组包提供者解包 一、protobuf的好处 1、protobuf是二进制存储的&#xff0c;xml和json都是文本存储的。故protobuf占…

综合布线系统(PDS)

综合布线系统&#xff08;PDS&#xff09; 综合布线系统的基本标准 ● TIA/EIA-568A/B&#xff1a;商业大楼电信布线标准 ● EIA/TIA-569:电信通道和空间的商业大楼标准 ● EIA/TIA-570&#xff1a;住宅和N型商业电信布线标准 ● TIA/EIA-606&#xff1a;商业大楼电信基础设施…

windows便签推荐哪款?

随着科技技术的进步&#xff0c;越来越多的人喜欢使用便签软件&#xff0c;因为它们能帮助我们快速记录和管理重要的信息和任务。在快节奏的现代生活中&#xff0c;便签软件成为了我们生活和工作中不可或缺的工具。特别是对于经常使用电脑的用户来说&#xff0c;一款优秀的便签…

戴尔外星人x16r1原装Win11系统带F12还原功能

戴尔外星人x16r1原装Win11系统带F12还原功能 电脑恢复到新机状态&#xff0c;完成&#xff1a; 1.系统恢复到预装系统&#xff0c;与新机买来状态完全一致&#xff1b; 2.隐藏恢复分区&#xff0c;戴尔与外星人相同&#xff0c;可以用来开机F12进入supportassis os recovery…

选择排序

选择排序 排序步骤&#xff08;有n个数需要排序&#xff09; 在一组序列中找到最大/小的元素&#xff0c;将其与序列的起始位置交换&#xff1b;此时可进一步缩小排序范围&#xff0c;将改序列的起始位置移出&#xff1b;寻找剩余范围序列中的最大/小值&#xff0c;与此时序列…

deeplabv3+源码之慢慢解析 第二章datasets文件夹(1)voc.py--voc_cmap函数和download_extract函数

系列文章目录&#xff08;更新中&#xff09; 第一章deeplabv3源码之慢慢解析 根目录(1)main.py–get_argparser函数 第一章deeplabv3源码之慢慢解析 根目录(2)main.py–get_dataset函数 第一章deeplabv3源码之慢慢解析 根目录(3)main.py–validate函数 第一章deeplabv3源码之…

JS UMD规范实现

UMD实现范例 (function (root, factory) {if (typeof module object && typeof module.exports object) {console.log(是commonjs模块规范&#xff0c;nodejs环境);var depModule require(./umd-module-depended);module.exports factory(depModule);} else if (t…

ElasticSearch入门教程--集群搭建和版本比较

文章目录 一、ElasticSearch 集群二、Elasticsearch的核心概念2.1、分片&#xff08;Shards&#xff09;2.2、副本&#xff08;Replicas&#xff09;2.3、路由计算2.4、倒排索引 三、Kibana简介四、Spring Data ElasticSearch 一、ElasticSearch 集群 Elasticsearch 集群有一个…

python pytorch 纯算法实现前馈神经网络训练(数据集随机生成)-续

python pytorch 纯算法实现前馈神经网络训练&#xff08;数据集随机生成&#xff09;-续 上一次的代码博主看了&#xff0c;有两个小问题其实&#xff0c;一个是&#xff0c;SGD优化的时候&#xff0c;那个梯度应该初始化为0&#xff0c;还一个是我并没有用到随机生成batch。 …

Flowable边界事件-定时边界事件

定时边界事件 定时边界事件一、定义1. 图形标记2. 完整的流程图3. XML标记 二、测试用例2.1 定时边界事件xml文件2.2 定时边界事件测试用例 总结 定时边界事件 一、定义 时间达到设定的时间之后触发事件 由于定时边界事件和开始定时事件几乎差不多&#xff0c;四种情况我就不一…

14、双亲委托模型

双亲委托模型 先直接来看一幅图 双亲委派模型的好处&#xff1a; 主要是为了安全性&#xff0c;避免用户自己编写的类动态替换Java的一些核心类&#xff0c;比如 String。 同时也避免了类的重复加载&#xff0c;因为JVM中区分不同类&#xff0c;不仅仅是根据类名&#xff0c…

React 新版官方文档 (二) useState 用法详解

背景 本文默认读者对 useState 有最为基本的了解&#xff0c;比如知道他的写法应当是怎样的&#xff0c;下面着重介绍部分重要的、在开发过程中会踩的坑和一些特性&#xff0c;最后动手实现一个最基本的 useState 代码 useState ⭐️ 注意事项: 状态只在下次更新时异步变化&…