zoukankan      html  css  js  c++  java
  • 各种时间函数的恩与怨

    C++标准库没有提供所谓的日期类型。C++继承了C语言用于日期和时间操作的结构和函数。为了使用日期和时间相关的函数和结构,需要在C++程序中引用<ctime>头文件。

    有四个与时间相关的类型:clock_t、time_t、size_t和tm。类型clock_t、size_t和time_t能够把系统时间和日期表示为某种整数。

    结构类型tm把日期和时间以C结构的形式保存,tm结构的定义如下:

    structtm{
    inttm_sec;//秒,正常范围从0到59,但允许至61
    inttm_min;//分,范围从0到59
    inttm_hour;//小时,范围从0到23
    inttm_mday;//一月中的第几天,范围从1到31
    inttm_mon;//月,范围从0到11
    inttm_year;//自1900年起的年数
    inttm_wday;//一周中的第几天,范围从0到6,从星期日算起
    inttm_yday;//一年中的第几天,范围从0到365,从1月1日算起
    inttm_isdst;//夏令时
    }
    

    下面是C/C++中关于日期和时间的重要函数。所有这些函数都是C/C++标准库的组成部分,您可以在C++标准库中查看一下各个函数的细节。

    序号函数描述
    1time_ttime(time_t*time);返回系统自1970.1.1以来经过的秒数
    2charctime(consttime_ttime);返回一个表示当地时间的字符串指针
    3structtmlocaltime(consttime_ttime);返回一个指向表示本地时间的tm结构的指针
    4clock_tclock(void);返回程序执行起处理器时钟所使用的时间
    5charasctime(conststructtmtime);返回一个指向字符串的指针
    6structtmgmtime(consttime_ttime);返回一个指向time的指针,time为tm结构,用协调世界时(UTC)也被称为格林尼治标准时间(GMT)表示
    7time_tmktime(structtm*time);返回日历时间,相当于time所指向结构中存储的时间
    8doubledifftime(time_ttime2,time_ttime1);返回time1和time2之间相差的秒数。
    9size_tstrftime();可用于格式化日期和时间为指定的格式。

    当前日期和时间

    下面的实例获取当前系统的日期和时间,包括本地时间和协调世界时(UTC)。

    实例

    #include<iostream>
    #include<ctime>
    
    usingnamespacestd;
    
    intmain()
    {
    //基于当前系统的当前日期/时间
    time_tnow=time(0);
    
    //把now转换为字符串形式
    char*dt=ctime(&now);
    
    cout<<"本地日期和时间:"<<dt<<endl;
    
    //把now转换为tm结构
    tm*gmtm=gmtime(&now);
    dt=asctime(gmtm);
    cout<<"UTC日期和时间:"<<dt<<endl;
    }
    

    当上面的代码被编译和执行时,它会产生下列结果:

    本地日期和时间:SatJan820:07:412011
    
    UTC日期和时间:SunJan903:07:412011
    

    使用结构tm格式化时间

    tm结构在C/C++中处理日期和时间相关的操作时,显得尤为重要。tm结构以C结构的形式保存日期和时间。大多数与时间相关的函数都使用了tm结构。下面的实例使用了tm结构和各种与日期和时间相关的函数。

    在练习使用结构之前,需要对C结构有基本的了解,并懂得如何使用箭头->运算符来访问结构成员。

    实例

    #include<iostream>
    #include<ctime>
    
    usingnamespacestd;
    
    intmain()
    {
    //基于当前系统的当前日期/时间
    time_tnow=time(0);
    
    cout<<"1970到目前经过秒数:"<<now<<endl;
    
    tm*ltm=localtime(&now);
    
    //输出tm结构的各个组成部分
    cout<<"年:"<<1900+ltm->tm_year<<endl;
    cout<<"月:"<<1+ltm->tm_mon<<endl;
    cout<<"日:"<<ltm->tm_mday<<endl;
    cout<<"时间:"<<ltm->tm_hour<<":";
    cout<<ltm->tm_min<<":";
    cout<<ltm->tm_sec<<endl;
    }
    

    当上面的代码被编译和执行时,它会产生下列结果:

    1970到目前时间:1503564157
    年:2017
    月:8
    日:24
    时间:16:42:37
    
  • 相关阅读:
    内核模块的一些问题
    [转]change the linux startup logo
    raspbian 静态IP
    [转]centos7 配置yum源(本地+光盘)
    [转]source inslght使用指导
    T420修改wifi灯闪动模式
    root运行chrome
    [转]理解阻塞非阻塞与同步异步
    [转] 计算机体系架构分类
    Win7下安装 Oracle Virtual Box
  • 原文地址:https://www.cnblogs.com/leon1124/p/14039826.html
Copyright © 2011-2022 走看看