1. 概念

(1) Coordinated Universal Time(UTC)

协调世界时,又称世界标准时间,即格林威治标准时间(Greenwich Mean Time,GMT)。UTC 通用标准时,以z来标识,时间格式如下:

2022-04-07T07:04:43.995Z

北京时间为UTC+8,UTC时间转化为:

2022-4-7 15:04:43

(2)Calendar Time

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

(3) epoch

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

2. 数据类型

(1)time_t

这是一个适合存储日历时间类型,实质是long int型。

(2)struct tm

tm包括日历日期和时间的各个组成。

struct tm {int tm_sec;     // 秒 0-59(一般)int tm_min;     // 分 0-59int tm_hour;    // 小时0-23int tm_mday;    // day 1-31int tm_mon;     // 月0-11int tm_year;    // 距 1900 的年数 如2022-1900 = 122int tm_wday;    // 星期 0-6int tm_yday;    // 距1月1号天数,0-365int tm_isdst;   // 夏令时
}

(3)struct timeval

struct timeval{long int tv_sec;     // 秒数long int tv_usec;    // 微秒数
}

3. 操作函数

(1)time函数获得日历时间

函数原型: time_t time(time_t *timer)

参数说明: timer=NULL时得到当前日历时间(从1900-01-01 00:00:00到现在的秒数(本地时区)),timer=时间数值时,用于设置日历时间,time_t是一个unsigned long类型。如果 timer不为空,则返回值也存储在变量 timer中。

函数功能: 得到当前日历时间或者设置日历时间

函数返回: 当前日历时间

(2)localtime函数获得日期时间

函数原型: struct tm *localtime(const time_t *timer)

函数功能: 使用 timer 的值来填充 tm 结构。timer 的值被分解为 tm 结构,并用本地时区表示。

函数返回: 以tm结构表达的时间

(3)asctime函数

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

函数功能:将结构struct tm * ptr所表示的时间以字符串表示

函数返回: 返回的时间字符串格式为:星期,月,日,小时:分:秒,年

参数说明: 结构指针ptr应通过函数localtime()或gmtime()得到

#include <stdio.h>
#include <time.h>
using namespace std;int main ()
{time_t timer;struct tm *ltm;time( &timer );ltm= localtime( &timer );//printf("当前的本地时间和日期:%s", asctime(ltm));// 输出 tm 结构的各个组成部分cout << "当前的本地时间和日期:" << endl;cout << "年: "<< 1900 + ltm->tm_year << endl;cout << "月: "<< 1 + ltm->tm_mon<< endl;cout << "日: "<<  ltm->tm_mday << endl;cout << "时间: "<< ltm->tm_hour << ":";cout << ltm->tm_min << ":";cout << ltm->tm_sec << endl;return(0);
}

(3)mktime函数

函数原型:time_t mktime(struct tm *timeptr)

函数功能:把 timeptr 所指向的结构转换为一个依据本地时区的 time_t 值

函数返回:该函数返回一个 time_t 值,该值对应于以参数传递的日历时间。如果发生错误,则返回 -1 值。

#include <stdio.h>
#include <time.h>int main ()
{int ret;struct tm info;char buffer[80];info.tm_year = 2001 - 1900;info.tm_mon = 7 - 1;info.tm_mday = 4;info.tm_hour = 0;info.tm_min = 0;info.tm_sec = 1;info.tm_isdst = -1;ret = mktime(&info);if( ret == -1 ){printf("错误:不能使用 mktime 转换时间。\n");}else{strftime(buffer, sizeof(buffer), "%c", &info );print(buffer);}return(0);
}

(4)gettimeday函数

函数原型:int gettimeofday(struct timeval*tv, struct timezone *tz)

函数功能:获得当前时间,精确到微秒(1e-6 s)量级

函数返回:该函数执行成功后返回0,失败后返回-1,错误代码存于errno中

函数参数:参数tv是保存获取时间结果的结构体,参数tz用于保存时区结果:

struct timezone{int tz_minuteswest;    // 格林威治时间往西方的时差int tz_dsttime;        // DST 时间的修正方式
}

timezone 参数若不使用则传入NULL即可。

在一段代码前后分别使用gettimeofday可以计算代码执行时间:

#include <stdio.h>
#include <sys/time.h>int main()
{struct timeval tv_begin, tv_end;gettimeofday(&tv_begin, NULL);fun();gettimeofday(&tv_end, NULL);//转化成小数点表示double t_s = (double)(tv_begin.tv_sec*1000000+tv_begin.tv_usec)/1000000.0f;double t_e = (double)(tv_end.tv_sec*1000000+tv_end.tv_usec)/1000000.0f;printf("elapsedTime: %.6f s\n",(t_e - t_s));
}

C++时间与日期及相关操作相关推荐

  1. 怎么修改php.in的时间,PHP时间和日期函数怎么操作

    PHP时间和日期函数怎么操作 php函数的多样化和功能相近真是一大特点,同一个应用可以用多种函数实现,这恐怕也是开源的一个弊端了:通过对PHP时间函数的系统学习,充分理解了时间戳和时区的概念(这个真的 ...

  2. C#中一些日期的相关操作

                    //如本年度销售额.本季度利润.本月新增客户                 //C#里内置的DateTime基本上都可以实现这些功能,巧用DateTime会使你处理这 ...

  3. java新的日期_java8你应该了解的新特性(新时间与日期API)

    java8你应该了解的新特性(新时间与日期API) java8,你应该了解的新特性(新时间与日期API) 1.使用 LocalDate .LocalTime .LocalDateTime LocalD ...

  4. Java 时间与日期处理

    Java 时间与日期处理 王下邀月熊 18 小时前 Java 时间与日期处理 从属于笔者的 现代 Java 开发系列文章,涉及到的引用资料声明在 Java 学习与实践资料索引中. Java 时间与日期 ...

  5. Java 时间与日期处理 1

    Java 时间与日期处理 从属于笔者的现代 Java 开发系列文章,涉及到的引用资料声明在 Java 学习与实践资料索引中. Java 时间与日期处理 在 Java 8 之前,我们最常见的时间与日期处 ...

  6. Java时间日期类处理(LocalDateTime、LocalDate相关操作、获取周几、工作日休息日节假日判定)

    1.LocalDateTime相关操作:(时间推移.计算两个LocalDateTime之间的时间间隔.转LocalDate),代码如下: // 获取LocalDateTime对象String date ...

  7. android 日期时间类,Android 时间与日期操作类

    获取本地日期与时间 public String getCalendar() { @SuppressLint("SimpleDateFormat") SimpleDateFormat ...

  8. java当中日期类的相关操作(学习笔记)

    一:引言 Calendar类是日历类,提供操作日历字段的方法,其中有常用操作 get 和 set 方法还有 add方法 详细用法请看码 二:上码 package cn.wyj.one;import j ...

  9. Python3 日期时间 相关模块(time(时间) / datatime(日期时间) / calendar(日历))

    Python3 日期时间 相关模块(time(时间) / datatime(日期时间) / calendar(日历)) 本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog. ...

最新文章

  1. VINS-Mono:一种鲁棒且通用的单目视觉惯性系统
  2. python使用openCV图像加载(转化为灰度图像)、Canny边缘检测器检测图像的边缘(Detect Edges)
  3. 程序员都痛恨开会?多开 1 个会,我少写 1000 行代码......
  4. 神策专访丨摩天轮票务陈校校:在线票务平台精准营销之道
  5. fegin需要实现类_【第24条】静态成员类优于非静态成员类
  6. 自动驾驶轻松开发?华为云ModelArts赋能智慧出行
  7. Java 用DBCP连接数据库。
  8. Linux 实用命令
  9. Linux 中软件使用及常见问题 QA
  10. 十大抢手的网站压力测试工具
  11. OSChina 周四乱弹 —— 懦夫!你就不能找富婆吗
  12. 合唱队形java_合唱队形
  13. C++之单例(singleton)模式
  14. 使用Dreamweaver进行一个简单的图文混排1/HTML
  15. 用LSTM生成武侠人名
  16. 怎么用单片机做一个比较有创新的东西?
  17. 单片机C语言学习(菜鸟入门)
  18. Linux基础——makefile编写
  19. Description 一个笼子里关了若干鸡和兔子,鸡有2只脚,兔子有4只脚,没有例外。已知笼子里脚的 总数a,问笼子里至少有多少只动物,至多有多少只动物? Input 第一行是测试数据的组数n,后面
  20. Android 实现系统打印机打印图片,文本,以及二维码生成与解析

热门文章

  1. Numpy+Pandas+Matplotlib学习
  2. matplotlib中cmap与color参数的设置
  3. Hudson-GIT-MAVEN 项目热部署
  4. 部署dashboard
  5. 离散数学笔记(一)数理逻辑
  6. 制作 win10 u 盘安装盘
  7. 一步一步学Spring Boot(二)课程发布了~~~
  8. Source code license
  9. 滴水穿石 C#中多线程 委托的使用
  10. 使用ASP和ASP.NET来创建文件夹和文件。