当前位置: 首页 > news >正文

【c/c++】获取时间

        在一些应用的编写中我们有时候需要用到时间,或者需要一个“锚点”来确定一些数的值。在c/c++中有两个用来确定时间的函数:time/gettimeofday

一、time

time_t time(time_t *timer);
  • time 函数返回当前时间的时间戳(自 1970 年 1 月 1 日以来经过的秒数)。
  • timer 参数是一个指向 time_t 类型变量的指针,用于存储获取的时间戳。如果传递 NULL,则表示不需要返回时间戳。
  • 在 C 语言中,time 函数用于获取当前的系统时间,以秒为单位,返回自 1970 年 1 月 1 日以来经过的秒数(即 Unix 时间戳)。
  • 在 C++ 语言中,time 函数同样用于获取当前的系统时间,但返回类型是 time_t 类型的值,表示从 1970 年 1 月 1 日以来经过的秒数。
  • 使用 time 函数只需要包含 <time.h> 头文件
#include <stdio.h>
#include <time.h>int main() {// 声明一个变量用于存储时间戳time_t current_time;// 使用 time 函数获取当前时间戳time(&current_time);// 打印获取的时间戳printf("Current timestamp: %ld\n", current_time);return 0;
}

当我们获取到这个time_t类型的数据时其实如果像转换成年份秒的话还是有一些麻烦,所以系统提供了一个叫作localtime的函数

1.2localtime

localtime 函数用于将时间戳转换为本地时间。它接受一个指向 time_t 类型的时间戳的指针,并返回一个指向 struct tm 结构体的指针,该结构体包含了转换后的本地时间信息。

struct tm *localtime(const time_t *timer);
  • timer 是一个指向 time_t 类型的时间戳的指针,表示要转换的时间。
  • 返回值是一个指向 struct tm 结构体的指针,包含了转换后的本地时间信息。

 

struct tm {int tm_sec;     // 秒 [0, 59]int tm_min;     // 分 [0, 59]int tm_hour;    // 时 [0, 23]int tm_mday;    // 一个月中的日 [1, 31]int tm_mon;     // 月 [0, 11]int tm_year;    // 年 - 1900int tm_wday;    // 一周中的日 [0, 6],0 表示星期天int tm_yday;    // 一年中的日 [0, 365]int tm_isdst;   // 夏令时标志:正值表示夏令时,零值表示不确定,负值表示不是夏令时
};

值得注意的是该在早期的 C 语言标准中,为了节省内存空间,结构体 struct tm 中的 tm_year 成员被设计为表示自 1900 年起的年数。这种设计主要是出于历史考虑和对早期计算机内存资源的限制。确实和time的1970不同,这种做法确实增加了一些不便,但在当时的环境下,这种设计被认为是合理的。

所以他的用例如下

#include <stdio.h>
#include <time.h>int main() {// 获取当前时间戳time_t current_time;time(&current_time);// 使用 localtime 函数将时间戳转换为本地时间struct tm *local_time = localtime(&current_time);// 打印转换后的本地时间信息printf("Local time: %d-%02d-%02d %02d:%02d:%02d\n",local_time->tm_year + 1900, local_time->tm_mon + 1, local_time->tm_mday,local_time->tm_hour, local_time->tm_min, local_time->tm_sec);return 0;
}

二、gettimeofday

int gettimeofday(struct timeval *tv, struct timezone *tz);
  • gettimeofday 函数获取当前时间,并将其存储在 struct timeval 结构体中。
  • tv 参数是一个指向 struct timeval 结构体的指针,用于存储获取的时间信息。
  • tz 参数是一个指向 struct timezone 结构体的指针,用于存储时区信息。在实际使用中通常传递 NULL,表示不需要获取时区信息。

 struct timeval 结构体的定义如下:

struct timeval {time_t      tv_sec;     // 秒数suseconds_t tv_usec;    // 微秒数
};struct timezone {int tz_minuteswest;     // 格林尼治时间西部时区和当前时区的分钟差值int tz_dsttime;         // DST(夏令时)是否生效
};
  • gettimeofday 函数提供了更高精度的时间信息,适用于需要更精确计时的场景。
  • 在 C 语言中,需要包含 <sys/time.h> 头文件,并且需要额外定义 struct timeval 结构体。
  • 在 C++ 语言中,同样需要包含 <sys/time.h> 头文件,并且使用 struct timeval 结构体来存储时间信息。
http://www.lryc.cn/news/301868.html

相关文章:

  • uniapp富文本文字长按选中(用于复制,兼容H5、APP、小程序三端)
  • 常见的几种Web安全问题测试简介
  • linux信号机制[一]
  • elementui 中el-date-picker 选择年后输出的是Wed Jan 01 2025 00:00:00 GMT+0800 (中国标准时间)
  • Redis 集群(Cluster)
  • 260.【华为OD机试真题】信道分配(贪心算法-JavaPythonC++JS实现)
  • Python打发无聊时光:3.实现简单电路的仿真
  • MyBatis-Plus:通用分页实体封装
  • MVC 、DDD(domain-driven design,软件主动学习业务)、中台、Java SPI(Service Provider Interface)
  • 添加环境变量
  • 学习Android的第十六天
  • 若依项目改造
  • 相机图像质量研究(34)常见问题总结:图像处理对成像的影响--拖影
  • 算法学习系列(三十五):贪心(杂)
  • 嵌入式面试:瑞芯微
  • 【性能测试】分布式压测之locust和Jmeter的使用
  • ABC341A-D题解
  • 计算机网络——07协议层次及服务模型
  • Netty Review - NIO空轮询及Netty的解决方案源码分析
  • PAM | 账户安全 | 管理
  • Leetcode 16-20题
  • 【开源训练数据集1】神经语言程式(NLP)项目的15 个开源训练数据集
  • 【AIGC】Stable Diffusion的ControlNet参数入门
  • 静态curl库编译与使用(c++)
  • element 表单提交图片(表单上传图片)
  • Android 15 第一个开发者预览版
  • anomalib1.0学习纪实-续1:增加新算法
  • Java+Vue+MySQL,国产动漫网站全栈升级
  • 机器人常用传感器分类及一般性要求
  • C++-opencv的imread、imshow、waitkey、namedWindow