返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++时间函数整理详解
  • 523
分享到

C++时间函数整理详解

C++时间函数怎么用C++时间函数C++时间 2022-11-13 19:11:38 523人浏览 薄情痞子
摘要

目录一、 时间概念原子时间世界协调时本地时间二、linux-c时间的存储方式1. time_t2. struct tm三、 常用函数四、 时间格式化五、计时器-时间段六、chrono

一、 时间概念

格林威治时间GMT(Greenwich Mean Time)

格林威治皇家天文台为了海上霸权的扩张计划,在十七世纪就开始进行天体观测。为了天文观测,选择了穿过英国伦敦格林威治天文台子午仪中心的一条经线作为零度参考线,这条线,简称格林威治子午线。

1884年10月召开了一个国际子午线会议,该会议将格林威治子午线设定为本初子午线,并将格林威治平时 (GMT, Greenwich Mean Time) 作为世界时间标准(UT, Universal Time)。由此也确定了全球24小时自然时区的划分,所有时区都以和 GMT 之间的偏移量做为参考。

1972年之前,格林威治时间(GMT)一直是世界时间的标准。1972年之后,GMT 不再是一个时间标准了。

XP系统中,默认时间格式是GMT。

目前UTC与GMT 相差为0.9秒,故二者可以基本视为一致。

原子时间

1967年,人们利用铯原子振荡周期极为规律的特性,研制出了高精度的原子时钟,将铯原子能级跃迁辐射9192631770周所经历的时间定为1s。现在用的时间就是1971年10月定义的国际原子时,是通过世界上大约200多台原子钟进行对比后,再由国际度量衡局时间所进行数据处理,得出的统一的原子时,简称Tai

世界协调时

又称世界统一时间、世界标准时间。UTC是现在全球通用的时间标准,全球各地都同意将各自的时间进行同步协调。UTC 时间是经过平均太阳时(以格林威治时间GMT为准)、地轴运动修正后的新时标以及以秒为单位的国际原子时所综合精算而成。

UTC 构成:

原子时间(TAI):

结合了全球400个所有的原子钟而得到的时间,它决定了我们每个人的钟表中,时间流动的速度。

世界时间(UT, Universal Time):

也称天文时间,或太阳时,他的依据是地球的自转,我们用它来确定多少原子时,对应于一个地球日的时间长度。

格式: YYYY-MM-DDThh:mm:ssZ

协调世界时不与任何地区位置相关,也不代表此刻某地的时间,所以在说明某地时间时要加上时区。也就是说GMT并不等于UTC,而是等于UTC+0,只是格林尼治刚好在0时区上。GMT = UTC+0。

本地时间

在日常生活中所使用的时间我们通常称之为本地时间。这个时间等于我们所在(或者所使用)时区内的当地时间,它由与世界标准时间(UTC)之间的偏移量来定义。这个偏移量可以表示为 UTC- 或 UTC+,后面接上偏移的小时和分钟数。

GMT是前世界标准时,UTC是现世界标准时。

UTC 比 GMT更精准,以原子时计时,适应现代社会的精确计时。

但在不需要精确到秒的情况下,二者可以视为等同。

每年格林尼治天文台会发调时信息,基于UTC。

二、Linux-c时间的存储方式

1. time_t

一个整型,存储从1970-1-1 00:00:00年到现在UTC+0经过了多少秒,进一步的,struct timeval可精确到微秒。

2. struct tm

用一个结构来分别存储年月日时分秒。

	struct tm
	{
	    int tm_sec;  
	    int tm_min;  
	    int tm_hour; 
	    int tm_mday; 
	    int tm_mon;    1+p->tm_mon;
	    int tm_year;    1900+ p->tm_year;
	    int tm_wday; 
	    int tm_yday; 
	    int tm_isdst; 
	};
特别注意,年份是从1900年起至今多少年,而不是直接存储如2022年。月份从0开始的,0表示一月,星期也是从0开始的, 0表示星期日,1表示星期一。

三、 常用函数

#include <time.h>

#include <sys/time.h>

time_t time(time_t* t);

取得从1970-1-1 00:00:00至今(UTC+0)的秒数,注意并不是至本地时间的秒数。该时间戳为GMT时间,即时区为0。

time()总是返回的是当前格林威治时间,不论系统/程序采用的哪个时区。所以使用time_t时候,让time_t上的存储值总是描述格林威治时间。

    time_t tm = time(nullptr);//取得从1970-1-1 00:00:00至今(UTC+0)的秒数
    //或
    time(&tm0);

struct tm* gmtime(const time_t* timep);

将time_t表示的时间戳转换为没有经过时区转换的UTC时间,是一个struct tm结构指针。

    struct tm *tmStamp = nullptr;
    time_t tmSec = time(nullptr); 
    tmStamp = gmtime(&tmSec);   //返回没有经过时区转换的UTC时间 struct tm结构

struct tm* localtime(const time_t* timep);

将time_t表示的时间戳转换换成经过时区转换的时间。使用time_t格林威治时间+时区偏差,生成tm结构

    struct tm *tmStamp = nullptr;
    time_t tmSec;
    time(&tmSec); //取得从1970年1月1日至今的秒数
    tmStamp = localtime(&tmSec); //返回经过时区转换的时间,***注意本函数可能会修改时间秒的值***

time_t mktime(struct tm* timeptr);

将struct tm 结构的时间转换为从1970-1-1年至今的秒数。

mktime考虑了时区,输入的值总是要求【localtime-tm】结构-当前时区时间,输出值格林威治时间;

char asctime(const struct tm timeptr);

将struct tm结构中的信息转换为真实世界的时间(不经过时区转换的UTC时间),以字符串的形式显示。

    time_t timeSec;
    time(&timeSec); 
    
    printf("%s", asctime(gmtime(&timeSec))); //没有经过时区转换的UTC时间

char ctime(const time_t timep);

将 time_t时间秒表示的时间转换为真实世界的时间(经时区转换的UTC时间),以字符串显示。

ctime考虑了时区,输入值要求time_t是格林威治时间,输出来的值总是用来描述当地时间。

// 形式:Mon Oct 24 11:41:17 2022
``
## 7. gettimeofday(&tmval,&zone); // for linux 
返回当前距离1970年的秒数和微妙数,后面的tz是时区,一般不用传NULL。
```c
	struct timezone zone;
    struct timeval tmval;
    gettimeofday(&tmval,&zone); // for linux

double difftime(time_t time1, time_t time2);

返回两个时间秒相差的秒数。

ctime返回的是静态变量地址;更要注意gmtime与localtime返回的静态变量地址是同一个,后调用的会覆盖上次调用的值;

tm结构存储值有时用来描述格林威治时间gmtime,有时用来描述当地时间localtime-当前时区时间。

四、 时间格式化

size_t strftime(char *str, size_t count, const char *fORMat, const struct tm *tm)

函数原型
#include <time.h>
size_t strftime(char *str, size_t count, const char *format, const struct tm *tm);
参数说明
  str, 表示返回的时间字符串
  count, 要写入的字节的最大数量
  format, 格式字符串由零个或多个转换符和普通字符(除%)
  tm, 输入时间
返回值
  如果包含终止的空字符在内的结果字符的总数不大于count,则函数strftime返回字符数,这些字符被放到s指向的数组中但不包含终止的空字符。否则,函数返回零,且数组的内容不确定。

一个常规用法

	char* format = "%Y-%m-%d %H:%M:%S";
    char strTime[100];
    strftime(strTime, sizeof(strTime), format, tmTime);//2022-10-07 20:46:01

五、计时器-时间段

#include <time.h>
#include <iOStream>
using namespace std;
clock_t start = clock();
// do something...
clock_t end   = clock();
cout << "花费了" << (double)(end - start) / CLOCKS_PER_SEC << "秒" << endl;

可精确到毫秒

六、chrono

c++ 11 标准库引入了chrono库。利用该库可以做时间运算和换算。

一个性能统计用法

#include <chrono>   
using namespace std;
using namespace chrono;
auto start = system_clock::now();
// do something...
auto end   = system_clock::now();
auto duration = duration_cast<microseconds>(end - start);
cout <<  "花费了" 
     << double(duration.count()) * microseconds::period::num / microseconds::period::den 
     << "秒" << endl;
//精确到微妙

到此这篇关于C++时间函数整理详解的文章就介绍到这了,更多相关C++时间函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++时间函数整理详解

本文链接: https://lsjlt.com/news/170376.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++时间函数整理详解
    目录一、 时间概念原子时间世界协调时本地时间二、Linux-c时间的存储方式1. time_t2. struct tm三、 常用函数四、 时间格式化五、计时器-时间段六、chrono...
    99+
    2022-11-13
    C++时间函数怎么用 C++时间函数 C++时间
  • C语言时间函数之strftime()详解
    strftime函数主要用于时间格式化,它的函数原型如下: size_t __cdecl strftime(char * __restrict__ _Buf,size_t _Size...
    99+
    2024-04-02
  • C/C++中时间库函数的使用详解
    目录C/C++ 中时间的概念常用的时间库函数time()asctime()gmtime()ctime()localtime()mktime()difftime()C/C++ 获取当前...
    99+
    2022-11-13
    C/C++时间库函数 C/C++时间函数 C++ 时间函数
  • C语言时间函数之mktime和difftime详解
    目录mktime函数difftime函数总结这两个函数原型如下: __CRT_INLINE time_t __cdecl mktime(struct tm *_Tm); __CR...
    99+
    2024-04-02
  • mysql几个常用的时间函数整理
    这篇文章主要介绍“mysql几个常用的时间函数整理”,在日常操作中,相信很多人在mysql几个常用的时间函数整理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql几个常...
    99+
    2024-04-02
  • PHP日期时间函数date() 详解
    **date()函数是我们在php开发中常碰到并且会使用到的一个日期函数,下面我来给大家介绍date()函数的一些基本扮靓和方法,有需要了解的朋友可进入参考. 日期时间函数是PHP 的核心组成部分。无...
    99+
    2023-09-11
    php 开发语言
  • C++ 函数优化详解:如何优化时间复杂度?
    为了优化 c++++ 函数的时间复杂度,可以通过以下方法:①避免不必要的复制操作;②减少函数调用;③使用高效的数据结构。举例来说,采用备忘录技术可以将斐波那契数列计算的复杂度从 o(2^...
    99+
    2024-05-03
    c++ 函数优化
  • 详解C# TimeSpan 计算时间差(时间间隔)
    在C#中,可以使用TimeSpan结构来表示一个时间间隔。TimeSpan结构提供了一系列方法来计算和比较时间间隔。下面是一些常用的...
    99+
    2023-09-16
    c#
  • 详解C# TimeSpan计算时间差(时间间隔)
    C#中的TimeSpan结构用于表示时间间隔,可以用于计算两个日期或时间之间的差异。下面是关于C# TimeSpan计算时间差的详细...
    99+
    2023-09-17
    C#
  • 详解php strtotime()和date()函数怎么处理时间戳
    在 PHP 中,要将日期时间和时间戳互为转化,可以使用内置的函数 strtotime() 和 date()。时间戳是一个表示时间的数字,它代表了自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数。下面是如何使用 strt...
    99+
    2023-05-14
    php时间戳 date() strtotime() php
  • PostgreSQL中的日期/时间函数详解
    目录零、前言一、获取当前时间二、时间的加减三、格式化函数3.1时间转字符串3.2字符串转日期3.3字符串转时间3.4Unix时间戳转时间四、一些重要函数4.1时间间隔4.2时间截取五...
    99+
    2024-04-02
  • PHP时间函数详解:学会处理日期和时间的常见问题
    PHP是一种广泛应用于web开发的脚本语言,其中的时间函数在处理日期和时间相关的问题时尤为重要。本文将详细介绍PHP中常用的时间函数,并提供具体代码示例,帮助读者更好地掌握时间处理的技...
    99+
    2024-02-29
    时间处理 php日期 函数解析
  • PHP函数之日期时间函数date()使用详解
    日期时间函数是PHP 的核心组成部分。无需安装即可使用这些函数。下面来详细说说date函数的具体用法: PHP Date() 函数PHP Date() 函数可把时间戳格式化为可读性更...
    99+
    2022-11-15
    日期时间函数 date
  • C++时间函数怎么使用
    这篇文章主要介绍“C++时间函数怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++时间函数怎么使用”文章能帮助大家解决问题。一、 时间概念格林威治时间GMT(Greenwich Mean ...
    99+
    2023-07-04
  • C/C++函数原理传参示例详解
    目录x84-64的寄存器函数是个什么东西?一个简单的函数传参姿势入栈规则看看汇编全都存寄存器吗?传对象呢?x84-64的寄存器 本文所用gcc为 x86-64 gcc 10.1 w...
    99+
    2022-12-08
    C/C++ 函数原理传参 C/C++ 函数传参
  • C/C++时间相关的函数有哪些
    本篇内容主要讲解“C/C++时间相关的函数有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C/C++时间相关的函数有哪些”吧!首先介绍下C++标准中的chrono库chrono是一个关于时间...
    99+
    2023-06-16
  • SQLServer中日期时间函数的用法详解
    1、getdate():获取当前日期 返回当前SQLServer服务器所在计算机的日期和时间。返回值舍入到最近的秒小数部分,精度为.333秒数据库十七偏移量不包含在内。 selec&...
    99+
    2024-04-02
  • C++lambda函数详解
    目录Lambda 表达式基础1. 值捕获2. 引用捕获3. 隐式捕获4. 表达式捕获泛型 Lambda函数对象包装器Lambda 表达式 Lambda 表达式是现代 C++ 中最重要...
    99+
    2023-02-13
    C++ lambda表达式 C++ lambda函数
  • 详细理解函C语言的函数栈帧
    目录一、函数栈帧的创建1.寄存器2.函数栈帧3.函数中调用函数二、函数栈帧的销毁总结一、函数栈帧的创建 1.寄存器 一般来说,计算机中的寄存器有六种 分别是:eax, ebx, e...
    99+
    2024-04-02
  • C++ 友元函数详解:何时需要使用友元函数?
    友元函数是一种非成员函数,拥有访问私有或受保护成员的权限。使用友元函数可方便实现跨类数据共享、访问私有成员以实现特定功能、允许外部函数访问类私有数据等。 C++ 友元函数详解:何时使用...
    99+
    2024-04-29
    c++ 友元函数 封装性
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作