C++获取系统时间

1、获取系统时间

time_t      time(

time_t  *t

);

返回从1970.1.1到指定时间 t 的秒数

time_t 为64位长整型,即__int64

VC6.0的64位整数分别叫做__int64与unsigned __int64,其范围分别是[-2^63, 2^63)与[0,2^64),即-9223372036854775808~9223372036854775807与0~18446744073709551615(约1800亿亿)。对64位整数的运算与32位整数基本相同,都支持四则运算与位运算等。当进行64位与32位的混合运算时,32位整数会被隐式转换成64位整数。

2、转换为本地时间

函数定义

1、localtime —— 平台通用,多线程下不安全

struct tm   *localtime(

    const time_t *clock

);

这个函数在返回的时候,返回的是一个指针,实际的内存是localtime内部通过static申请的静态内存,所以通过localtime调用后的返回值不及时使用的话,很有可能被其他线程localtime调用所覆盖掉。

2、localtime_r —— Linux平台,安全函数

多线程应用里面,应该用localtime_r函数替代localtime函数,因为localtime_r是线程安全的,但是localtime_r只能运行于Linux平台。

struct tm*   localtime_r(

    const time_t* timer,

    struct tm* result

);

3、localtime_s —— Windows平台,安全函数

localtime_s也是用来获取系统时间,运行于windows平台下,与localtime_r只有参数顺序不一样.

errno_t   localtime_s(

    struct tm* _tm,

    const time_t *time

);

时间结构体

struct tm {
        int tm_sec;     /* seconds after the minute - [0,59] */
        int tm_min;     /* minutes after the hour - [0,59] */
        int tm_hour;    /* hours since midnight - [0,23] */
        int tm_mday;    /* day of the month - [1,31] */
        int tm_mon;     /* months since January - [0,11] */
        int tm_year;    /* years since 1900 */
        int tm_wday;    /* days since Sunday - [0,6] */
        int tm_yday;    /* days since January 1 - [0,365] */
        int tm_isdst;   /* daylight savings time flag */
        };

使用例子

    time_t timeSec=time(NULL);
    struct tm* ptm=localtime(&timeSec);
    sprintf("%02d:%02d:%02d",ptm->tm_hour, ptm->tm_min, ptm->tm_sec);

    time_t timeSec=time(NULL);
    struct tm ptm={ 0 };
    localtime_r(&timeSec, &ptm);
    sprintf("%02d:%02d:%02d", ptm.tm_hour, ptm.tm_min, ptm.tm_sec);

    time_t timeSec = time(NULL);
    struct tm ptm;
    localtime_s(&ptm, &timeSec);
    printf("%d:%d:%d", ptm.tm_hour, ptm.tm_min, ptm.tm_sec);

注意,不能写成如下格式!!!

    time_t timeSec = time(NULL);
    struct tm *ptm = NULL;
    localtime_s(ptm, &timeSec);
    printf("%d:%d:%d", ptm->tm_hour, ptm->tm_min, ptm->tm_sec);

否则程序会崩溃并抛出异常:

原因是系统不允许空指针作为参数去调用标准库函数!!

猜你喜欢

转载自blog.csdn.net/rammuschow/article/details/81638294