在做项目中,我们经常需要获取系统的当前时间,那么如何获取呢,参见下面的代码:

/* asctime example */
#include <stdio.h> /* printf */
#include <time.h> /* time_t, struct tm, time, localtime, asctime */ int main ()
{
time_t rawtime;
struct tm * timeinfo; time ( &rawtime );
timeinfo = localtime ( &rawtime );
printf ( "The current date/time is: %s", asctime (timeinfo) ); return ;
}

输出结果为:

The current date/time is:: Thu Feb  :: 

但是,有些情况下我们想分别获得年月日时分秒的值,而不是像这样得到一个整个的字符串,那么既然时间信息都存在了一个结构体timeinfo中,那么我们就先来看看这个结构体的定义吧:

struct tm {
int tm_sec; // seconds of minutes from 0 to 61
int tm_min; // minutes of hour from 0 to 59
int tm_hour; // hours of day from 0 to 24
int tm_mday; // day of month from 1 to 31
int tm_mon; // month of year from 0 to 11
int tm_year; // year since 1900
int tm_wday; // days since sunday
int tm_yday; // days since January 1st
int tm_isdst; // hours of daylight savings time
}

好了,看完了结构体的定义,我们再来看看asctime()函数是如何取出想要的数据,并加以转换的:

char* asctime(const struct tm *timeptr)
{
static const char wday_name[][] = {
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
};
static const char mon_name[][] = {
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};
static char result[];
sprintf(result, "%.3s %.3s%3d %.2d:%.2d:%.2d %d\n",
wday_name[timeptr->tm_wday],
mon_name[timeptr->tm_mon],
timeptr->tm_mday, timeptr->tm_hour,
timeptr->tm_min, timeptr->tm_sec,
+ timeptr->tm_year);
return result;
}

如果我们直接将timeinfo结构体中的年月日时分秒打印出来,会得到:

     

而我们需要的是:

     

仔细观察asctime()函数,我们可以发现年的保存方式是自1900年之后,所以要+1900,月是把名称简写存入了一个数组,数组从0开始,所以要得到月的数字,需要+1,后面的日时分秒没有变化,可以直接使用。

若想获得类似20150226114637这样的年月日时分秒的字符串,可以用下面的函数:

std::string getTimeStamp() {
time_t rawtime;
struct tm * timeinfo;
time( &rawtime );
timeinfo = localtime( &rawtime );
char year[], mon[], mday[], hour[], minute[], sec[];
sprintf(year, "%d", timeinfo->tm_year + );
sprintf(mon, "%d", timeinfo->tm_mon + );
sprintf(mday, "%d", timeinfo->tm_mday);
sprintf(hour, "%d", timeinfo->tm_hour);
sprintf(minute, "%d", timeinfo->tm_min);
sprintf(sec, "%d", timeinfo->tm_sec); std::string yearStr = std::string(year);
std::string monStr = std::string(mon);
if (monStr.size() == ) monStr = "" + monStr;
std::string mdayStr = std::string(mday);
if (mdayStr.size() == ) mdayStr = "" + mdayStr;
std::string hourStr = std::string(hour);
if (hourStr.size() == ) hourStr = "" + hourStr;
std::string minuteStr = std::string(minute);
if (minuteStr.size() == ) minuteStr = "" + minuteStr;
std::string secStr = std::string(sec);
if (secStr.size() == ) secStr = "" + secStr;
return yearStr + monStr + mdayStr +\
hourStr + minuteStr + secStr;
}

另外,如果编译器支持C++11的话,也可以使用std::chrono来操作时间,可参见下列实例代码:

#include <iostream>
#include <chrono>
#include <ctime> long fibonacci(int n)
{
if (n < ) return ;
return fibonacci(n-) + fibonacci(n-);
} int main()
{
std::chrono::time_point<std::chrono::system_clock> start, end;
start = std::chrono::system_clock::now();
std::cout << "f(42) = " << fibonacci() << '\n';
end = std::chrono::system_clock::now(); std::chrono::duration<double> elapsed_seconds = end-start;
std::time_t end_time = std::chrono::system_clock::to_time_t(end); std::cout << "finished computation at " << std::ctime(&end_time)
<< "elapsed time: " << elapsed_seconds.count() << "s\n";
}

C++ Get Current Time 获取当前时间的更多相关文章

  1. iOS中获取当前时间,设定时间,并算出差值

    NSDate *date = [NSDate date];//获取当前时间 NSTimeZone *zone = [NSTimeZone systemTimeZone];//修改时区 NSIntege ...

  2. PHP 中获取当前时间[Datetime Now]

    在 PHP 中可以通过date()获取当前时间,在>5.2的版本中最好还是用 datetime 类型 date() <?php echo date('Y-m-d H:i:s'); ?> ...

  3. 一个 C# 获取高精度时间类(调用API QueryP*)

    如果你觉得用 DotNet 自带的 DateTime 获取的时间精度不够,解决的方法是通过调用 QueryPerformanceFrequency 和 QueryPerformanceCounter这 ...

  4. python获取网络时间和本地时间

    今天我们来看一下如何用python获取网络时间和本地时间,直接上代码吧,代码中都有注释. python获取网络时间 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  5. jPlayer获取播放时间

    关于jPlayer的用法,可以参考:jPlayer 2.6.0开发者手册 http://www.jplayer.cn/developer-guide.html 视频播放例子: //视频播放 var v ...

  6. 浅析libuv源码-获取精确时间

    在Timer模块中有提到,libuv控制着延迟事件的触发,那么必须想办法精确控制时间. 如果是JS,获取当前时间可以直接通过Date.now()得到一个时间戳,然后将两段时间戳相减得到时间差.一般情况 ...

  7. Linux下用C获取当前时间

    Linux下用C获取当前时间,具体如下: 代码(可以把clock_gettime换成time(NULL)) ? 1 2 3 4 5 6 7 8 9 10 void getNowTime() {  ti ...

  8. golang 时间戳 时间格式化 获取当前时间 timestamp 计算时间差

    获取当前时间 func Now func Now() Time 1 Now returns the current local time. func (Time) UTC func (t Time) ...

  9. Js获取当前日期时间及其它操作

    Js获取当前日期时间及其它操作var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年份 ...

随机推荐

  1. springJDBC实现查询方法二

    无废话,看代码: @Override public List<Sites> queryAllSites(Pager pager) { String sql = "select * ...

  2. JSTL分类查询

    index.jsp <%@ page language="java" import="java.util.*" pageEncoding="UT ...

  3. Servlet、JSP选择题(2)

    Java EE软件工程师认证考试 试题库-选择题 一.    选择题(包括单选和双选) 1.B 编写一个Filter,需要(  ) A. 继承Filter 类 B. 实现Filter 接口 C. 继承 ...

  4. OSG addEventHandler W键 L键 F键

    // add the state manipulator    viewer->addEventHandler( new osgGA::StateSetManipulator(viewer-&g ...

  5. MFC中添加消息响应函数

    转自:http://blog.csdn.net/eddy_liu/article/details/8474677 目前,用MFC设计的Windows应用程序几乎都采用文档/视图结构.这种程序框架与简单 ...

  6. 一、HTML和CSS基础--网页布局--实践--固定层效果

    absolute和fixed的相同点: 第一,完全脱离标准文档流 第二,未设置偏移量时,都定位在父元素的左上角 absolute和fixed的不同点: 第一.当设置偏移量时,偏移参照基准不同 abso ...

  7. hdu 2639 第k大01背包

    求每个状态里的k优解,然后合并 /* HDU 2639 求01背包的第k大解. 合并两个有序序列 */ #include<stdio.h> #include<iostream> ...

  8. Java Annotation原理分析(一)

    转自:http://blog.csdn.net/blueheart20/article/details/18725801 小引: 在当下的Java语言层面上,Annotation已经被应用到了语言的各 ...

  9. Android: 启动另外的APP及传递参数(转)

    转载自:http://blog.csdn.net/iefreer/article/details/8812585 有时候需要从一个APP中启动另外一个APP,比如Twitter/微信等. 如果你不知道 ...

  10. Gym 100971D Laying Cables 单调栈

    Description One-dimensional country has n cities, the i-th of which is located at the point xi and h ...