在C++11之前要获取当前时间,大多数情况下要使用C语言的time库:

#include <iostream>
#include<time.h>
#include <sstream>int main()
{time_t now = time(NULL);tm* tm_t = localtime(&now);std::stringstream ss;ss << "year:" << tm_t->tm_year + 1900 << " month:" << tm_t->tm_mon + 1 << " day:" << tm_t->tm_mday<< " hour:" << tm_t->tm_hour << " minute:" << tm_t->tm_min << " second:" << tm_t->tm_sec;std::cout << ss.str();int wait;std::cin >> wait;
}

time_t是一个64位的整型。记录的是从1970-01-01 00:00:00到现在经过的时间,精度只能到秒。从tm的结构也能看出来:

struct tm
{int tm_sec;   // seconds after the minute - [0, 60] including leap secondint tm_min;   // minutes after the hour - [0, 59]int tm_hour;  // hours since midnight - [0, 23]int tm_mday;  // day of the month - [1, 31]int tm_mon;   // months since January - [0, 11]int tm_year;  // years since 1900int tm_wday;  // days since Sunday - [0, 6]int tm_yday;  // days since January 1 - [0, 365]int tm_isdst; // daylight savings time flag
};

要输出真实的日期,需要tm_year+1900, tm_mon+1

当然也可以直接调用系统API,GetSystemTime,GetLocalTime,精度都到毫秒。注意GetSystemTime获取的是UTC时间,跟GetLocalTime获取的北京时间不同,有8小时时差,需要hour+8才是真实的小时:

 SYSTEMTIME sysTime = { 0 };GetSystemTime(&sysTime);ss << "year:" << sysTime.wYear << " month:" << sysTime.wMonth << " day:" << sysTime.wDay<< " hour:" << sysTime.wHour+8 << " minute:" << sysTime.wMinute << " second:" << sysTime.wSecond <<" milliseconds:"<< sysTime.wMilliseconds;std::cout << ss.str() << std::endl;

说说C++11中的时间,可以精确到纳秒:

 std::cout << "秒:"<<std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now().time_since_epoch()).count() << std::endl;std::cout << "毫秒:" << std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count()<<std::endl;std::cout << "微秒:" << std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::system_clock::now().time_since_epoch()).count() << std::endl;std::cout << "纳秒:" << std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::system_clock::now().time_since_epoch()).count() << std::endl;

std::chrono::system_clock::now() 是当前的时间点

std::chrono::system_clock::now().time_since_epoch()获取到的也是到时间元年(1970-01-01)的时间间隔,可以用std::chrono::duration_cast<>函数可以方便的改变获取到时间的精度。

std::chrono::duration_cast<std::chrono::seconds>转换的时间与C库中的time函数获取的相同:

C time: 1582891867
秒:1582891867
毫秒:1582891867251
微秒:1582891867251721
纳秒:1582891867252208200

std::chrono::system_clock::now()获取的是时间点std::chrono::time_point,时间点的time_since_epoch成员可以获取当前时间点到时间元年经过的时间。

time_t tNow= std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());也可以转换为C库的时间time_t但是精度就变为秒,相当于std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now().time_since_epoch()).count()

不足之处是没有好的时间格式化方法,不能方便的输出,所以一般是先转为time_t,C的方式来输出,不足之处是只能输出到秒了,不过也是有补足的方法:

 auto now = std::chrono::system_clock::now();//通过不同精度获取相差的毫秒数uint64_t dis_millseconds = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count()- std::chrono::duration_cast<std::chrono::seconds>(now.time_since_epoch()).count() * 1000;time_t tt = std::chrono::system_clock::to_time_t(now);auto time_tm = localtime(&tt);char strTime[25] = { 0 };sprintf(strTime, "%d-%02d-%02d %02d:%02d:%02d %03d", time_tm->tm_year + 1900,time_tm->tm_mon + 1, time_tm->tm_mday, time_tm->tm_hour,time_tm->tm_min, time_tm->tm_sec, (int)dis_millseconds);std::cout << strTime << std::endl;

输出时间:

2020-02-28 20:24:08 285

STL正在不断完善,期待更完善的时间库。

C++获取当前时间 (std::chrono)相关推荐

  1. std::chrono时间库详解

    主要时间类型 std::ratio<num, den> 定义分式(std::ratio模板请参考<C++新标准之std::ratio>),例如: std::ratio<6 ...

  2. C++11中的时间库std::chrono(引发关于时间的思考)

    文章目录 前言 chrono 的概况 chrono 的核心内容 duration clock system_clock steady_clock time point 关于时间的思考 时间函数思考 总 ...

  3. c++11日期和时间工具-(std::chrono::system_clock)

    定义于头文件 <chrono> std::chrono 库 chrono 库定义三种主要类型以及工具函数和常用 typedef . 时钟 时长 时间点 来自系统范畴实时时钟的挂钟时间 st ...

  4. C++11新特性,利用std::chrono精简传统获取系统时间的方法

    一.传统的获取系统时间的方法 传统的C++获取时间的方法须要分平台来定义. 相信百度代码也不少. 我自己写了下,例如以下. const std::string getCurrentSystemTime ...

  5. 使用std::chrono获取系统时间

    传统的时间戳获取方式: /**************************************************************** 功能:获取系统当前运行毫秒值* 返回值:* ...

  6. C++ - 使用std::chrono获取当前秒级/毫秒级/微秒级/纳秒级时间戳

    1 使用std::chrono获取当前秒级/毫秒级/微秒级/纳秒级时间戳 1.1 当前时间戳获取方法 先使用std::chrono获取当前系统时间,然后将当前系统时间转换为纪元时间std::time_ ...

  7. std::chrono时间

    头文件:#include <chrono> c++11的时间库chrono均位于名字空间std::chrono下. 命名空间:using namespace std::chrono; 宏定 ...

  8. 弄清std::chrono::system_clock::time_point,自定义时间工具类

    time_t 是32位的整数,用来存放格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数,不能表示毫秒,约能表示135年 time ...

  9. std::chrono::duration_cast时间计算

    参考链接 std::chrono::duration_cast

最新文章

  1. Checked ==true ? Y:N ;
  2. 信用评分python_信用评分卡(python)
  3. php响应超过三十秒会报错么,如何捕捉致命错误:PHP中超过30秒的最大执行时间...
  4. (十五)nodejs循序渐进-高性能游戏服务器框架pomelo之Protobuf模块
  5. leetcode哈希表(python与c++)
  6. ibm mq qname java_IBMMQ 从队列获取消息并将消息发送到特定主题上面
  7. 使用eclipse启动服务时,程序的发布目录
  8. C#正则匹配、分组和替换
  9. linux下编译jrtplib和jthread,Linux下编译jrtplib和jthread(转)
  10. vue生成静态html文件_Vue项目打包成一个HTML文件(包含CSS,JS)
  11. Centos8安装谷歌浏览器
  12. 免费设计素材网站,这4个就够了。
  13. 阵列服务器怎么拆硬盘盒,磁盘阵列硬盘盒拆解和安装,很详细
  14. python上市公司有哪些_python调用tushare获取A股上市公司基础信息
  15. html绘制三维,在HTML + JS画布中绘制三维图形
  16. 计算机教师培训项目申报书,课题《基于培养教师信息素养的教学研究》申报书(2013年4月—2015年3月)...
  17. ios和android 浏览器适配问题总结
  18. 利用相控阵馈源技术提高射电望远镜性能
  19. Qt基于QuaZIP实现文件压缩/解压(Linux下)
  20. 和《超能陆战队》中“大白”硬扯上的关系的职场哲学

热门文章

  1. 多元经验模态分解_交通运输|基于小波分解和长短时记忆网络的地铁进站量短时预测...
  2. 双语祝福:欢度国庆,举国同庆!
  3. python表情代码_Python实现表情包的代码实例
  4. word 中的文字有点颜色,感觉像色差一样的处理办法 ,你试试
  5. 互联网的时代,每个公司都有对应的网站,网站的作用都有哪些?
  6. 无极调光炫彩rgb镜子灯触摸芯片-DLT8S12A-杰力科创
  7. 【方法指南】将以逗号为分隔值的文件转换为excel格式文件
  8. 一个非常好用的播放器 老外的哦
  9. 【软工文档】机房收费系统之详细设计说明书
  10. 人脸识别方框闪烁原因