zoukankan      html  css  js  c++  java
  • 日期和时间

    引入时间的头文件

    #include <ctime>

    这个头文件里面有个结构体

    struct tm
    {
        int tm_sec; //秒,正常范围0 ~59,但是允许到61
        int tm_min; //分 范围 0~59
        int tm_hour; //小时 0~23
        int tm_mday;    //一月中的第几天
        int tm_mon;    //月 0~11
        int tm_year;    //自1900年起的年数
        int tm_wday;    //一周中的第几天
        int tm_yday;    //一年中的第几天
        int tm_isdst; //夏令时    
    }

    还有几个数据类型

    clock_t     Clock type (type )
    size_t       Unsigned integral type (type )
    time_t      Time type (type )
    struct tm  Time structure (type )

    成员函数如下:

    函数原型如下:

           char *ctime(const time_t *timep);
           char *asctime(const struct tm *tm);
           struct tm *gmtime(const time_t *timep);
           struct tm *localtime(const time_t *timep);
           double difftime(time_t time1, time_t time0);
           time_t mktime(struct tm *tm);
           clock_t clock(void);
           size_t strftime(char *s, size_t max, const char *format,const struct tm *tm);
    int main(int argc, char const *argv[])
    {
        time_t now = time(0);
    
        cout<< now << endl;
    }

    输出

    1586137485

    这串数字表示从1970年1月1日到现在 经过了多少秒

    我们把这个秒转化为能看懂的时间

    int main(int argc, char const *argv[])
    {
        time_t  now = time(0);
    
        cout<< now << endl;
    
        char *dt = ctime(&now);
    
        cout <<"local time is :"<< dt <<endl;
    
    }

    输出:

    1586137485
    local time is :Mon Apr  6 09:44:45 2020

    给 ctime 传入 time_t 类型的参数,则返回一个字符串表示时间

    字符串格式:

    day month year hours:minutes:seconds year

    接下来我们将刚得到的本地时间转化为格林威治时间

    int main(int argc, char const *argv[])
    {
        time_t  now = time(0);
        cout<< now << endl;
    
        tm *gmtm = gmtime(&now);
        char *dt = asctime(gmtm);
        cout << "utc time :"<<dt<<endl;
    }

    得到输出如下

    1586138755
    utc time :Mon Apr  6 02:05:55 2020

    gmtime()  将time()得到的秒数作为参数传入该函数 ,得到utc时间的结构体(就是前文我们介绍过的结构体 tm)

    asctime()  格式转化函数,表示把时间转化为ascii码,而ctime()表示把时间转化为字符串 字符串的格式前文有写。

          和ctime()不同的是:asctime()传入的参数是 tm 结构体

                      ctime()传入的参数是 time_t 类型的秒数

    同样的方法我们看一下本地时间函数 localtime()

    int main(int argc, char const *argv[])
    {
        time_t  now = time(0);
        cout<< now << endl;
    
        tm *gmtm = gmtime(&now);
        char *dt = asctime(gmtm);
        cout << "utc time :"<<dt<<endl;
    
        gmtm = localtime(&now);
        dt = asctime(gmtm);
        cout << "local time :"<<dt<<endl;   
    }

    输出如下:

    1586139439
    utc time :Mon Apr  6 02:17:19 2020
    
    local time :Mon Apr  6 10:17:19 2020

    得到的分别是世界时间(格林威治时间)和北京时间,中间相差8个小时。

    因为time()返回的是 0 时区的时间,而我们国家是东八区 自然相差8个小时。

    接下来我们把上面结构体的数据都打印出来

    int main(int argc, char const *argv[])
    {
        time_t  now = time(0);
        cout<< "second from 1970.1.1 :"<<now << endl;
    
        tm *gmtm = localtime(&now);
        char *dt = asctime(gmtm);
        cout << "local time :"<<dt<<endl;   
    
        cout<<"tm_sec    "<<gmtm->tm_sec<<endl;
        cout<<"tm_min    "<<gmtm->tm_min<<endl;    
        cout<<"tm_hour    "<<gmtm->tm_hour<<endl;
        cout<<"tm_mday    "<<gmtm->tm_mday<<endl;
        cout<<"tm_mon    "<<gmtm->tm_mon<<endl;
        cout<<"tm_year    "<<gmtm->tm_year<<endl;
        cout<<"tm_wday    "<<gmtm->tm_wday<<endl;
        cout<<"tm_yday    "<<gmtm->tm_yday<<endl;
        cout<<"tm_isdst    "<<gmtm->tm_isdst<<endl;
    }

    输出如下:

    second from 1970.1.1 :1586140107
    local time :Mon Apr  6 10:28:27 2020
    
    tm_sec    27  秒
    tm_min    28  分
    tm_hour    10  时
    tm_mday    6  几号
    tm_mon    3  几月
    tm_year    120  年
    tm_wday    1  星期
    tm_yday    96  本年第几天
    tm_isdst    0  

    上面汉字是我后加上去的

    可以看出有几个数据不对,其中tm_mon 这个月份是从0开始,所以程序中的3表示4月,tm_year表示从1900年开始,所以1900+120 = 2020

    再看一下时间比较函数 difftime()

    int main(int argc, char const *argv[])
    {
        time_t start,end;
        double dif;
        time(&start);
        sleep(5);
        time(&end);
        dif = difftime(end,start);
        cout<<dif<<endl;
    }

    取两次时间的秒数,一次是sleep之前,一次是sleep之后,将这两个时间传入函数,得出时间差

    注意如果是linux运行 sleep头文件是 #include <unistd.h>

  • 相关阅读:
    微信公众号--JS-SDK
    微信公众号--网页授权
    微信公众号--资源请求
    微信公众号--相关资料
    微信公众号--消息回复
    一.小程序 --申请
    2017年总结
    SSM框架中常用的配置文件
    UML的9种图例解析
    23种设计模式汇总整理
  • 原文地址:https://www.cnblogs.com/qifeng1024/p/12640954.html
Copyright © 2011-2022 走看看