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

时间:2023-02-02 08:29:17

一、传统的获取系统时间的方法

传统的C++获取时间的方法须要分平台来定义。

相信百度代码也不少。

我自己写了下,例如以下。

const std::string getCurrentSystemTime()
{ if (PLATFORM_ANDROID || PLATFORM_IOS)
{
struct timeval s_now;
struct tm* p_tm;
gettimeofday(&s_now,NULL);
p_tm = localtime((const time_t*)&s_now.tv_sec);
char date[60] = {0};
sprintf(date, "%d-%02d-%02d %02d:%02d:%02d",
(int)p_tm->tm_year + 1900,(int)p_tm->tm_mon + 1,(int)p_tm->tm_mday,
(int)p_tm->tm_hour,(int)p_tm->tm_min,(int)p_tm->tm_sec);
return std::string(date);
}
if (PLATFORM_W32)
{
struct tm* p_tm;
time_t timep;
time(&timep);
p_tm = localtime(&timep);
char date[60] = {0};
sprintf(date, "%d-%02d-%02d %02d:%02d:%02d",
(int)p_tm->tm_year + 1900,(int)p_tm->tm_mon + 1,(int)p_tm->tm_mday,
(int)p_tm->tm_hour,(int)p_tm->tm_min,(int)p_tm->tm_sec);
log("%s",date);
return std::string(date);
}
return "";
}

二、C++11 std标准库跨平台方法

显然,我们注意到不同平台下的代码相似度非常高。那么能不能利用C++11里面的新特性,使得二者合并呢?

答案是肯定的。

非常easy的。代码例如以下:

const std::string getCurrentSystemTime()
{
auto tt = std::chrono::system_clock::to_time_t
(std::chrono::system_clock::now());
struct tm* ptm = localtime(&tt);
char date[60] = {0};
sprintf(date, "%d-%02d-%02d %02d:%02d:%02d",
(int)ptm->tm_year + 1900,(int)ptm->tm_mon + 1,(int)ptm->tm_mday,
(int)ptm->tm_hour,(int)ptm->tm_min,(int)ptm->tm_sec);
return std::string(date);
}

又短又简单有木有。

本文原创,如需转载,请说明出处:

http://blog.csdn.net/q229827701/article/details/41015483

C++11新特性,利用std::chrono精简传统获取系统时间的方法的更多相关文章

  1. C++ 11新特性:std::future & std::shared_future) (转载)

    上一讲<C++11 并发指南四(<future> 详解二 std::packaged_task 介绍)>主要介绍了 <future> 头文件中的 std::pack ...

  2. C&plus;&plus;11新特性之 std&colon;&colon;forward&lpar;完美转发&rpar;(转)

    我们也要时刻清醒,有时候右值会转为左值,左值会转为右值. (也许“转换”二字用的不是很准确) 如果我们要避免这种转换呢? 我们需要一种方法能按照参数原来的类型转发到另一个函数中,这才完美,我们称之为完 ...

  3. C&plus;&plus;11新特性之 std&colon;&colon;forward&lpar;完美转发&rpar;

    我们也要时刻清醒,有时候右值会转为左值,左值会转为右值. (也许“转换”二字用的不是很准确) 如果我们要避免这种转换呢? 我们需要一种方法能按照参数原来的类型转发到另一个函数中,这才完美,我们称之为完 ...

  4. C&plus;&plus; 11新特性:std bind 原理简单图解(转载)

    本文解释了bind 是如何工作的.为了清晰,我对图中的语法作了一些简化(例如,省略函数调用操作符的参数类型),并且简化了 bind 的实现. bind 可以用来将用户提供的需要一个参数的函数转换成不需 ...

  5. C&plus;&plus;11新特性应用--实现延时求值&lpar;std&colon;&colon;function和std&colon;&colon;bind&rpar;

    说是延时求值,注意还是想搞一搞std::function和std::bind. 之前博客<C++11新特性之std::function>注意是std::function怎样实现回调函数. ...

  6. c&plus;&plus;11新特性总结&lpar;转&rpar;

    1.类型与变量相关 1.1.nullptr: 取代了NULL,专用于空指针 1.2.constexpr: 近似const, 可以修饰变量,也可以修饰函数, 修饰变量如: const int globa ...

  7. c&plus;&plus;11新特性总结&lpar;转。加上重点&rpar;

    1.类型与变量相关 1.1.nullptr: 取代了NULL,专用于空指针 1.2.constexpr: 近似const, 可以修饰变量,也可以修饰函数, 修饰变量如: const int globa ...

  8. &lbrack;转载&rsqb; C&plus;&plus;11新特性

    C++11标准发布已有一段时间了, *上有对C++11新标准的变化和C++11新特性介绍的文章. 我是一名C++程序员,非常想了解一下C++11. 英文版的*看起来非常费劲,而中文版维基百 ...

  9. C&plus;&plus; 11学习和掌握 ——《深入理解C&plus;&plus; 11:C&plus;&plus;11新特性解析和应用》读书笔记&lpar;一&rpar;

    因为偶然的机会,在图书馆看到<深入理解C++ 11:C++11新特性解析和应用>这本书,大致扫下,受益匪浅,就果断借出来,对于其中的部分内容进行详读并亲自编程测试相关代码,也就有了整理写出 ...

随机推荐

  1. iOS文档注释

    Eclipse和IntelliJ IDEA系的IDE都有自动生成文档注释的功能,Xcode虽然安装了VVDocument,但是仍然感觉注释的功能不是很完善,于是今天整理了一下书写文档注释的一些用法. ...

  2. oracle后台进程详解

    oracle后台进程伴随实例的启动而启动,他们主要是维护数据库的稳定,相当于一个企业中的管理者及内部服务人员.他们并不会直接给用户提供服务.   一:database write--数据写入  DBW ...

  3. 苹果MAC中安装并搭建Android开发环境的详细步骤

    Android的开发平台搭建主要需要的工具有:Java虚拟机JDK.Eclipse.Eclipse插件ADT(Android Developer Tool)和Android开发包SDK,以下是具体的安 ...

  4. jint

    nuget地址 https://www.nuget.org/packages/Jint/ github上源代码 https://github.com/sebastienros/jint

  5. &lbrack;Swift系列&rsqb;003- 函数

    [基础] Swift函数格式: 1.定义格式: func   函数名(参数名1:数据类型,... ,参数名n:数据类型) -> (返回值类型1,...,返回值类型n){ ///函数体内语句 } ...

  6. Unable to read TLD &quot&semi;META-INF&sol;c&period;tld&quot&semi;错误

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  7. poj1173 解题报告

    poj1173 解题报告2013-07-21 13:31 by 期待 ., 42 阅读, 0 评论, 收藏, 编辑 http://poj.org/problem?id=1173 发现此题资料甚少,斗胆 ...

  8. python全栈开发day92-day96 Vue总结

    -- ES6常用语法 -- var let const -- 模板字符串 -- 反引号 -- ${} -- 箭头函数 -- 普通函数取决于函数最近的调用者 -- 箭头函数取决当前环境 -- 类 -- ...

  9. JavaScript之能力与硬件检测&lbrack;小结&rsqb;

    //检查浏览器种类及其版本号 function checkBrowserVersion(){ var Sys = {}; var ua = navigator.userAgent.toLowerCas ...

  10. stack堆栈容器、queue队列容器和priority&lowbar;queue优先队列容器(常用的方法对比与总结)

    stack堆栈是一个后进先出的线性表,插入和删除元素都在表的一端进行. stack堆栈的使用方法: 采用push()方法将元素入栈: 采用pop()方法将元素出栈: 采用top()方法访问栈顶元素: ...