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 0;
}

输出结果为:

The current date/time is:: Thu Feb 26 11:40:19 2015

但是,有些情况下我们想分别获得年月日时分秒的值,而不是像这样得到一个整个的字符串,那么既然时间信息都存在了一个结构体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[][4] = {
    "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
  };
  static const char mon_name[][4] = {
    "Jan", "Feb", "Mar", "Apr", "May", "Jun",
    "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
  };
  static char result[26];
  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,
    1900 + timeptr->tm_year);
  return result;
}

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

115 1 26 11 46 37

而我们需要的是:

2015 2 26 11 46 37

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

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

std::string getTimeStamp() {
    time_t rawtime;
    struct tm * timeinfo;
    time( &rawtime );
    timeinfo = localtime( &rawtime );
    char year[5], mon[3], mday[3], hour[3], minute[3], sec[3];
    sprintf(year, "%d", timeinfo->tm_year + 1900);
    sprintf(mon, "%d", timeinfo->tm_mon + 1);
    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() == 1) monStr = "0" + monStr;
    std::string mdayStr = std::string(mday);
    if (mdayStr.size() == 1) mdayStr = "0" + mdayStr;
    std::string hourStr = std::string(hour);
    if (hourStr.size() == 1) hourStr = "0" + hourStr;
    std::string minuteStr = std::string(minute);
    if (minuteStr.size() == 1) minuteStr = "0" + minuteStr;
    std::string secStr = std::string(sec);
    if (secStr.size() == 1) secStr = "0" + secStr;
    return yearStr + monStr + mdayStr +        hourStr + minuteStr + secStr;
}
时间: 2024-08-08 01:26:39

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

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

1 NSDate *date = [NSDate date];//获取当前时间 2 NSTimeZone *zone = [NSTimeZone systemTimeZone];//修改时区 3 NSInteger interval1 = [zone secondsFromGMTForDate: date];//修改时区 4 _localDate1 = [date dateByAddingTimeInterval: interval1];//修改时区 5 NSLog(@"~~~~~~~~~~~~

Linux下用C获取当前时间

Linux下用C获取当前时间,具体如下: 代码(可以把clock_gettime换成time(NULL)) ? 1 2 3 4 5 6 7 8 9 10 void getNowTime() {  timespec time;  clock_gettime(CLOCK_REALTIME, &time); //获取相对于1970到现在的秒数  tm nowTime;  localtime_r(&time.tv_sec, &nowtime);  char current[1024];  

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

在Timer模块中有提到,libuv控制着延迟事件的触发,那么必须想办法精确控制时间. 如果是JS,获取当前时间可以直接通过Date.now()得到一个时间戳,然后将两段时间戳相减得到时间差.一般情况下当然没有问题,但是这个方法并不保险,因为本地计算机时间可以修改. libuv显然不会用这么愚蠢的办法来计算时间,C++内部有更为精妙的方法来处理这个事. 首先在上一节中,一个简单的事件轮询代码如下: int main() { uv_loop_t *loop = uv_default_loop();

MySQL时间函数-获取当前时间-时间差

MySQL中获取当前时间为now(),不同于sqlserver getdate(). SQLServer转MySQL除变化top 1 -> limit 1之后报错: select 1 from record_visitor where visitor_ip='' and datediff(mi,visitor_time,getdate())<=30 limit 1 [Err] 1582 - Incorrect parameter count in the call to native func

iOS 获取当前时间以及计算年龄(时间差)

获取当前时间 NSDate *now = [NSDate date]; NSLog(@"now date is: %@", now); NSCalendar *calendar = [NSCalendar currentCalendar]; NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarU

Js获取当前日期时间+日期印证+判断闰年+日期的天数差+日期格式化+JS判断某年某月有多少天

Js获取当前日期时间+日期验证+判断闰年+日期的天数差+日期格式化+JS判断某年某月有多少天 字符串转日期型+Js当前日期时间+日期验证+判断闰年+日期的天数差+日期格式化+日期所在年的第几周 日期时间脚本库方法列表Date.prototype.isLeapYear 判断闰年Date.prototype.Format 日期格式化Date.prototype.DateAdd 日期计算Date.prototype.DateDiff 比较日期差Date.prototype.toString 日期转字符

Javascript获取服务器时间

Javascript是运行在客户端的脚本,我们一般都用new Date()来获取当前时间,但是得到的是客户端的时间,客户端时间是随意更改的,如果要做一个产品发布倒计时的话,客户端时间一改,就要闹笑话了.业务中需要用到服务器时间的场景还有很多,那么仅仅通过js怎么拿到服务器时间呢?事实上,只需要一个ajax请求就搞定,通过读取XMLHttpRequest对象的请求头里面的时间戳得到当前服务器时间! 原理就是这么简单:通过ajax向服务器发送请求,当服务器收到请求后即可读取请求头的时间戳了,不管请求

PHP获取当前时间、时间戳的各种格式写法汇总

今天写下php中,如何通过各种方法 获取当前系统时间.时间戳,并备注各种格式的含义,可灵活变通.1.获取当前时间方法date()很简单,这就是获取时间的方法,格式为:date($format, $timestamp),format为格式.timestamp为时间戳–可填参数.2.获取时间戳方法time().strtotime()这两个方法,都可以获取php中unix时间戳,time()为直接获取得到,strtotime($time, $now)为将时间格式转为时间戳,$time为必填.清楚了这个

javascript获取当前时间

? //时间设置 <script type="text/javascript"> <!-- var myDate = new Date();     myDate.getYear();      //获取当前年份(2位)     myDate.getFullYear(); //获取完整的年份(4位,1970-????)     myDate.getMonth();      //获取当前月份(0-11,0代表1月)     myDate.getDate();