C/C++中的日期和时间

2023-10-27

C/C++中的日期和时间

撰文/周翔


摘要:
本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h头文件中声明的各种函数和数据结构的详细使用方法。

关键字:UTC(世界标准时间),Calendar Time(日历时间),epoch(时间点),clock tick(时钟计时单元)

1.概念
在C/C++中,对字符串的操作有很多值得注意的问题,同样,C/C++对时间的操作也有许多值得大家注意的地方。最近,在技术群中有很多网友也多次问到过C++语言中对时间的操作、获取和显示等等的问题。下面,在这篇文章中,笔者将主要介绍在C/C++中时间和日期的使用方法.

通过学习许多C/C++库,你可以有很多操作、使用时间的方法。但在这之前你需要了解一些“时间”和“日期”的概念,主要有以下几个:

Coordinated Universal Time(UTC):协调世界时,又称为世界标准时间,也就是大家所熟知的格林威治标准时间(Greenwich Mean Time,GMT)。比如,中国内地的时间与UTC的时差为+8,也就是UTC+8。美国是UTC-5。

Calendar Time:日历时间,是用“从一个标准时间点到此时的时间经过的秒数”来表示的时间。这个标准时间点对不同的编译器来说会有所不同,但对一个编译系统来说,这个标准时间点是不变的,该编译系统中的时间对应的日历时间都通过该标准时间点来衡量,所以可以说日历时间是“相对时间”,但是无论你在哪一个时区,在同一时刻对同一个标准时间点来说,日历时间都是一样的。

epoch:时间点。时间点在标准C/C++中是一个整数,它用此时的时间和标准时间点相差的秒数(即日历时间)来表示。

clock tick:时钟计时单元(而不把它叫做时钟滴答次数),一个时钟计时单元的时间长短是由CPU控制的。一个clock tick不是CPU的一个时钟周期,而是C/C++的一个基本计时单位。

我们可以使用ANSI标准库中的time.h头文件。这个头文件中定义的时间和日期所使用的方法,无论是在结构定义,还是命名,都具有明显的C语言风格。下面,我将说明在C/C++中怎样使用日期的时间功能。

2. 计时

C/C++中的计时函数是clock(),而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下:

clock_t clock( void );

这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock)。其中clock_t是用来保存时间的数据类型,在time.h文件中,我们可以找到对它的定义:

#ifndef _CLOCK_T_DEFINED
typedef long clock_t;
#define _CLOCK_T_DEFINED
#endif

很明显,clock_t是一个长整形数。在time.h文件中,还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元,其定义如下:

#define CLOCKS_PER_SEC ((clock_t)1000)

可以看到每过千分之一秒(1毫秒),调用clock()函数返回的值就加1。下面举个例子,你可以使用公式clock()/CLOCKS_PER_SEC来计算一个进程自身的运行时间:

void elapsed_time()
{
printf("Elapsed time:%u secs./n",clock()/CLOCKS_PER_SEC);
}

当然,你也可以用clock函数来计算你的机器运行一个循环或者处理其它事件到底花了多少时间:

#include “stdio.h”
#include “stdlib.h”
#include “time.h”

int main( void )
{
   long    i = 100

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C/C++中的日期和时间 的相关文章

随机推荐

  • Python格式化输出之format函数

    format函数是Python中一个很强大的格式化输出函数 使用花括号 来占位 下面结合代码来讲述format函数的用法 一 匹配顺序 print 姓名 年龄 format 张三 25 运行结果 姓名 张三 年龄 25 可以看出 forma
  • 26.UART串口接收过程与配置

    UART串口接收过程与配置 参考资料 STM32Fx中文参考手册 第26章 通用同步异步收发器章节 开发板配套教程 STM32Fx开发指南 串口实验章节 笔记基于正点原子官方视频 视频连接https www bilibili com vid
  • O-RAN专题系列-42:管理面-WG4.MP.V07-规范解读-第9章-文件管理

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122588292 目录 第9章 Fil
  • 分解质因数(线性筛)

    https ac nowcoder com acm contest 923 B 我真是个辣鸡 现在才知道线性筛 思路 对于每个数字的阶乘 开一个一维数组记录每个数字出现的个数 先利用一维差分将每个数字的阶乘中出现都得数字累加个数 然后再利用
  • 详细记下Flutter开发遇到的各种坑-带你走出入门弯路

    目录 flutter安装 设置环境变量 Android studio安装 解决install emulator问题 安装Flutter和Dart插件 gradle构建错误 分析原因 解决问题 设置gradle全局变量 生成APK问题 解决方
  • 《代码大全2》第1章 欢迎进入软件构建的世界

    目录 前言 1 1 什么是软件构建 1 1 1 构建活动 与 非构建活动 1 1 2 构建活动 相对于其他软件开发活动的地位 1 1 3 构建活动 的具体任务 1 2 构建活动 为何如此重要 1 2 1 构建活动 重要的原因 1 3 如何阅
  • mysqldump where子句使用

    mysqldump 的 where 条件子句适用于这种情况 导出某张表的部分数据 where name 参数详情 w where name Dump only selected records Quotes are mandatory 使用
  • python下复制excel某行数据,xlwings

    不是专业码农 朋友课题遇到一个问题 调研了90个人 有14个sheet的数据 每个人的数据在14个sheet里面都有 位置也相同 比如张三的数据 在14个sheet里面都是在18行 需要把其中16个人的数据拿出来 还是这14个sheet都要
  • spring如何做到循环引用

    spring如何做到循环引用 总结 源码中的流程 如果看官觉得有点用 点赞一下 鼓励一下我吧 总结 spring的循环引用只有一种情况 单例且无参构造 多例情况不支持 有参构造不支持 原因 无参构造可以完成创建在堆内存中的引用 即使这个引用
  • spring-boot配置slf4j日志

    SLF4J 即简单日志门面 Simple Logging Facade for Java 不是具体的日志解决方案 它只服务于各种各样的日志系统 按照官方的说法 SLF4J 是一个用于日志系统的简单 Facade 允许最终用户在部署其应用时使
  • socks5代理ip账号密码_VMlogin中文版配置使用911S5代理

    一 911 S5代理设置 打开911 S5代理并去往 程序 Program 页面 在程序列表 program list 中随机添加一个程序 911 S5程序需要用户选择一个程序 请您不要在此处添加VMlogin 因为它会收到干扰 前往 设置
  • Dynamic Region-Aware Convolution

    旷视提出 DRConv 动态区域感知卷积 提升分类 检测 分割性能 Dynamic Region Aware Convolution 是2020年旷视在arXiv上的新论文 该论文实际上是在动态卷积 local形式 上引入了空间上的分组 从
  • 亚马逊云科技上实现 “端到端”安全

    亚马逊云科技认为 安全是构建生成式 AI 不可回避的重要议题 企业只有在 AI 旅程中做好数据 模型和应用的安全防护 才能更好地借助 AI 加速业务创新 同时在全球业务规划做好战略布局 亚马逊云科技在五大领域为用户提供全方位的云安全服务 威
  • Qt环境生成dump解决异常崩溃

    背景 对于经常使用C C 的伙伴来说 程序有问题动不动就罢工崩溃的问题简直不能太熟悉了 比如本地测试通过打包发布的release版本Qt程序 在客户环境下仍可能出现异常崩溃的问题 一般通过客户反馈以及分析系统运行日志 问题基本都能够得到快速
  • 洛谷表达式求值

    题目描述 给定一个只包含加法和乘法的算术表达式 请你编程计算表达式的值 输入输出格式 输入格式 一行 为需要你计算的表达式 表达式中只包含数字 加法运算符 和乘法运算符 times 且没有括号 所有参与运算的数字均为 000 到 231 1
  • CentOS 7下启动、关闭、重启、查看MySQL服务

    1 启动命令 root xufeng Desktop service mysqld start Redirecting to bin systemctl start mysqld service 2 关闭命令 root xufeng ser
  • 栈系列之 递归实现一个栈的逆序

    算法专题导航页面 算法专题 栈 栈系列之 栈排序 栈系列之 最小栈的实现 栈系列之 用栈实现队列 栈系列之 递归实现一个栈的逆序 题目 使用递归来完成一个栈的逆序操作 其他限制 不能借助任何其他数据结构 图示 无 分析 递归思想原本就和栈这
  • 力扣第五十三道最大子数组和

    题目 给你一个整数数组 nums 请你找出一个具有最大和的连续子数组 子数组最少包含一个元素 返回其最大和 子数组 是数组中的一个连续部分 输入 nums 2 1 3 4 1 2 1 5 4 输出 6 解释 连续子数组 4 1 2 1 的和
  • Exploring Large Language Models for Knowledge Graph Completion

    本文是LLM系列文章 针对 Exploring Large Language Models for Knowledge Graph Completion 的翻译 探索用于知识图谱补全的大型语言模型 摘要 1 引言 2 相关工作 3 方法 4
  • C/C++中的日期和时间

    C C 中的日期和时间 撰文 周翔 摘要 本文从介绍基础概念入手 探讨了在C C 中对日期和时间操作所用到的数据结构和函数 并对计时 时间的获取 时间的计算和显示格式等方面进行了阐述 本文还通过大量的实例向你展示了time h头文件中声明的