C++ Get Current Time 获取当前时间
在做项目中,我们经常需要获取系统的当前时间,那么如何获取呢,参见下面的代码:
/* 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 获取当前时间的更多相关文章
- iOS中获取当前时间,设定时间,并算出差值
NSDate *date = [NSDate date];//获取当前时间 NSTimeZone *zone = [NSTimeZone systemTimeZone];//修改时区 NSIntege ...
- PHP 中获取当前时间[Datetime Now]
在 PHP 中可以通过date()获取当前时间,在>5.2的版本中最好还是用 datetime 类型 date() <?php echo date('Y-m-d H:i:s'); ?> ...
- 一个 C# 获取高精度时间类(调用API QueryP*)
如果你觉得用 DotNet 自带的 DateTime 获取的时间精度不够,解决的方法是通过调用 QueryPerformanceFrequency 和 QueryPerformanceCounter这 ...
- python获取网络时间和本地时间
今天我们来看一下如何用python获取网络时间和本地时间,直接上代码吧,代码中都有注释. python获取网络时间 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- jPlayer获取播放时间
关于jPlayer的用法,可以参考:jPlayer 2.6.0开发者手册 http://www.jplayer.cn/developer-guide.html 视频播放例子: //视频播放 var v ...
- 浅析libuv源码-获取精确时间
在Timer模块中有提到,libuv控制着延迟事件的触发,那么必须想办法精确控制时间. 如果是JS,获取当前时间可以直接通过Date.now()得到一个时间戳,然后将两段时间戳相减得到时间差.一般情况 ...
- Linux下用C获取当前时间
Linux下用C获取当前时间,具体如下: 代码(可以把clock_gettime换成time(NULL)) ? 1 2 3 4 5 6 7 8 9 10 void getNowTime() { ti ...
- golang 时间戳 时间格式化 获取当前时间 timestamp 计算时间差
获取当前时间 func Now func Now() Time 1 Now returns the current local time. func (Time) UTC func (t Time) ...
- Js获取当前日期时间及其它操作
Js获取当前日期时间及其它操作var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年份 ...
随机推荐
- css 中的度量单位
px 相对长度单位.像素(Pixel). 像素是相对于显示器屏幕分辨率而言的.譬如,WONDOWS的用户所使用的分辨率一般是96像素/英寸.而MAC的用户所使用的分辨率一般是72像素/英寸. em 相 ...
- Android 中的openurl
在iOS中这么叫,在android中不知道是不是这么称呼. 转发一篇文章 http://www.cnblogs.com/zhangkai5157/p/3289532.html
- poj 1363 Rails 解题报告
题目链接:http://poj.org/problem?id=1363 题意:有一列火车,车厢编号为1-n,从A方向进站,向B方向出站.现在进站顺序确定,给出一个出站的顺序,判断出站顺序是否合理. 实 ...
- August 6th, 2016, Week 32nd, Saturday
It is not the mountain we conquer, but ourselvess. 我们征服的不是高山,而是我们自己. Difficulties and obstacles, jus ...
- 线段覆盖4(codevs 3012)
题目描述 Description 数轴上有n条线段,线段的两端都是整数坐标,坐标范围在0~1000000,每条线段有一个价值,请从n条线段中挑出若干条线段,使得这些线段两两不覆盖(端点可以重合)且线段 ...
- 分布式架构从零开始========》【基于Java自身技术实现消息方式的系统间通信】
基于Java自身包实现消息方式的系统间通信的方式有:TCP/IP+BIO,TCP/IP+NIO,UDP/IP+BIO,UDP/IP+NIO.下面就这4种类型一一做个详细的介绍: 一.TCP/IP+BI ...
- CSS优化技巧
CSS是页面效果呈现中非常重要的组成部分,它包括颜色.大小尺寸.背景和字体等.写CSS很简单很容易,但是要想写出精炼的CSS代码还是有很多技巧的. 下面就是技巧7则: . 合并多个相同属性: 比如很多 ...
- web页面自适应手机屏幕宽度
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scal ...
- How to enable logging
转自:https://www.chromium.org/for-testers/enable-logging How to enable logging To enable logging, laun ...
- 【转】kylin优化
转自: http://www.bitstech.net/2016/01/04/kylin-olap/ http://www.csdn.net/article/2015-11-27/2826343 ht ...