时间编程碰到的一个问题

今天学习了关于时间上的编程,其中涉及了几个主要的函数

首先时间可以分为2种

1 是格林威治时间  这就是全球的标准时间

2 是日历时间          所谓日历时间就是从1970年1月1号00:00:00开始到现在这个时间之间的秒数

time_t time(time_t *tloc)

这个函数是用来获得是日历事件,这里的tloc是用来存储日历事件的,如果tloc = null的话就不存储时间,但是该函数还是会返回一个日历事件的


struct tm* gmtime(const time_t * timep);

struct tm*localtime(const time_t *timep);

这两个函数是用来将日历时间转化为GMT时间或者是当地时间的

struct tm  是一个结构体,里面包含了一些元素.

版本1

#include<stdio.h>
#include<time.h>

int main()
{
    typedef struct tm mytime;
    mytime * local;
    mytime * gmt;
    time_t rili = time(NULL);
    gmt = gmtime(&rili);
    printf("GMT is %d year %d month %d day %d hour\n",gmt->tm_year + 1900,gmt->tm_mon + 1,gmt->tm_mday,gmt->tm_hour);
    local = localtime(&rili);
    printf("Localtime is %d year %d month %d day %d hour\n",local->tm_year + 1900,local->tm_mon + 1,local->tm_mday,local->tm_hour);
    return 0;
}


版本2

#include<stdio.h>
#include<time.h>

int main()
{
    typedef struct tm mytime;
    mytime * local;
    mytime * gmt;
    time_t rili = time(NULL);
    gmt = gmtime(&rili);
    local = localtime(&rili);
    printf("GMT is %d year %d month %d day %d hour\n",gmt->tm_year + 1900,gmt->tm_mon + 1,gmt->tm_mday,gmt->tm_hour);

    printf("Localtime is %d year %d month %d day %d hour\n",local->tm_year + 1900,local->tm_mon + 1,local->tm_mday,local->tm_hour);
    return 0;
}


区别在于

gmt = gmtime(&rili);
local = localtime(&rili);
版本1中是取得一个时间以后就直接输出,而版本2是先都取得了时间,在输出。可是版本2 的结果是错误的,结果是GMT和localtime的时间是一模一样了.

后来看了帮助文档发现了这么一句话

The gmtime, mktime, and localtime functions use the same single, statically allocated structure to hold their results. Each call to one of these functions destroys the result of any previous call. 


大概意思好像说是这三个函数相同的静态的结构体来存储结果,每一次调用函数都会破坏前面的结果。

所以我知道我的错误出现在哪里了....



你可能感兴趣的:(时间编程碰到的一个问题)