zoukankan      html  css  js  c++  java
  • C/C++获取本地时间常见方法

    跨平台方法

    方法一:手动暴力法

    #include <iostream>
    using namespace std;
    #include <time.h>
    
    time_t t = time(NULL);
        struct tm* stime=localtime(&t);
    char tmp[32]={NULL};
         sprintf(tmp, "%04d-%02d-%02d %02d:%02d:%02d",1900+stime->tm_year,1+stime->tm_mon,
                    stime->tm_mday, stime->tm_hour,
                    stime->tm_min,stime->tm_sec);
        cout<<tmp<<endl;

    输出结果:2015-04-02 23:12:56

    方法二:投机取巧法

    #include <iostream>
    using namespace std;
    #include <time.h>
    
        time_t t = time(0); 
        char tmp[32]={NULL};
        strftime(tmp, sizeof(tmp), "%Y-%m-%d %H:%M:%S",localtime(&t)); 
        cout<<tmp<<endl;

    输出结果:2015-04-02 23:12:56

    方法三:简获日历时间法

    #include <iostream>
    using namespace std;
    #include <time.h>
    #include <string>
    
    time_t tm;
    time(&tm);
    char tmp[128]={NULL};
    strcpy(tmp,ctime(&tm));
    //或者
    //struct  tm* stime=localtime(&tm);
    //strcpy(tmp,asctime(stime));
    cout<<tmp<<endl;

    输出结果:Fri Aug 14 23:19:42 2015

    Windows平台获取时间

    #include <iostream>
    using namespace std;
    #include <time.h>
    #include <windows.h>
    
    SYSTEMTIME sys; 
    GetLocalTime( &sys );
    char tmp[64]={NULL};
    sprintf(tmp,"%4d-%02d-%02d %02d:%02d:%02d ms:%03d",sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute,sys.wSecond,sys.wMilliseconds); 
        cout<<tmp<<endl;

    输出结果:2015-08-14 23:41:56 ms:354

    Unix平台获取时间

    #include <sys/time.h> 
    #include <unistd.h>
    
    struct timeval now_time;
    gettimeofday(&now_time, NULL);
    time_t tt = now_time.tv_sec;
    tm *temp = localtime(&tt);
    char time_str[32]={NULL};
    sprintf(time_str,"%04d-%02d-%02d%02d:%02d:%02d",temp->tm_year+ 1900,temp->tm_mon+1,temp->tm_mday,temp->tm_hour,temp->tm_min, temp->tm_sec);
    cout<<tmp<<endl;

    输出时间:2015-08-14 23:41:56

    需知知识点

    (1)UTC (Coordinated Universal Time):协调世界时,又称世界标准时间。曾由格林威治平均时间(Greenwich Mean Time,GMT)提供,如今由原子钟提供。比方,中国内地的时间与UTC的时差为+8。也就是UTC+8。美国是UTC-5。

    (2)Calendar Time:日历时间,是用“从一个标准时间点到此时的时间经过的秒数”来表示的时间,由time()函数获取。这个标准时间点对不同的编译器来说会有所不同,但对一个编译系统来说。这个标准时间点是不变的,该编译系统中的时间相应的日历时间都通过该标准时间点来衡量,所以能够说日历时间是“相对时间”,可是不管你在哪一个时区。在同一时刻对同一个标准时间点来说,日历时间都是一样的。

    (3)Epoch指的是一个特定的时间点:1970-01-01 00:00:00 UTC,即Unix 时间戳。

    (4)clock tick:时钟计时单元(而不把它叫做时钟滴答次数),一个时钟计时单元的时间长短是由CPU控制的。

    一个clock tick不是CPU的一个时钟周期,而是C/C++的一个基本计时单位。
    在VC++的time.h文件里。我们能够找到相关的定义:

    #ifndef _CLOCK_T_DEFINED
    typedef long clock_t;
    #define _CLOCK_T_DEFINED
    #endif
    
    #define CLOCKS_PER_SEC ((clock_t)1000)
    
    clock_t clock( void );

    这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计
    时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock)。

    //获取逝去时间
        clock_t start, finish;
        start=clock();
        …
        finish=clock();
    //逝去多少秒
        long duration=(finish- start)/ CLOCKS_PER_SEC ;

    (5) time.h还提供了两种不同的函数将日历时间(一个用time_t表示的整数)转换为我们平时看到的把年月日时分秒分开显示的时间格式tm:

    struct tm * gmtime(const time_t *timer);                                          
    struct tm * localtime(const time_t * timer);

    当中gmtime()函数是将日历时间转化为世界标准时间(即格林尼治时间)。并返回一个tm结构体来保存这个时间。而localtime()函数是将日历时间转化为本地时间。比方如今用gmtime()函数获得的世界标准时间是2005年7月30日7点18分20秒,那么我用localtime()函数在中国地区获得的本地时间会比世界标准时间晚8个小时。

    (6)分解时间就是以年、月、日、时、分、秒等分量保存的时间结构,在C/C++中是tm结构。我们能够使用mktime()函数将用tm结构表示的时间转化为日历时间。其函数原型例如以下:
    time_t mktime(struct tm * timeptr);
    该函数与gmtime和localtime函数具有相反的作用。

    參考文献

    [1] http://blog.sina.com.cn/s/blog_48f3622d010008zx.html

  • 相关阅读:
    杭电 搜索 1253 胜利大逃亡
    杭电 搜索 1258 Sum It Up
    杭电搜索 2612 Find a way
    杭电 搜索 水题1072 Nightmare
    杭电1175简单搜索 连连看
    杭电 1372 Knight Moves
    杭电 oj Rescue 1242
    杭电 1241 Oil Deposits
    杭电 2100 Children’s Queue
    杭电 1103 Flo's Restaurant
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/7019898.html
Copyright © 2011-2022 走看看