time函数计算时间

学过C语言的都知道有个time函数可以计算时间,

也好像知道time(NULL)返回的是一个距离1970年1月1日0时0分0秒的秒数。

time函数计算时间
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    printf("%d\n", time(NULL));
    return 0;
}
time函数计算时间

运行结果:1390351382

乍一看,说法不假,还真是那么一个秒数。

 

还有不相信的,进一步把秒数、分钟数、小时数分别取出来。

time函数计算时间
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int t, s, m, h;

    t = time(NULL);

    //
    s = t % 60;
    t /= 60;

    // 分钟
    m = t % 60;
    t /= 60;

    // 小时
    h = t % 24;
    
    printf("%d:%d:%d\n", h, m, s);
    return 0;
}
time函数计算时间

运行结果:0:53:5

奇怪!我的电脑明明是8点53分,为什么上面是0点呢?

 

哎!还是来个彻底的吧!根据这个秒数把日历时间算出来,

看看到底有什么猫腻。

time函数计算时间
#include <stdio.h>
#include <time.h>

char month[2][12] = { 
    31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 
    31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 
};

// 四年一闰,百年不闰,四百年再闰
int is_leap_year(int year)
{
    // 先找四百年,是闰年
    if (year % 400 == 0)
        return 1;

    // 再找一百、二百、三百年,是平年
    if (year % 100 == 0)
        return 0;

    // 最后找四的倍数年,是闰年
    if (year % 4 == 0)
        return 1;

    // 不是四百的倍数,
    // 不是一百、二百、三百的倍数,
    // 不是四的倍数,是平年
    return 0;
}

int main(void)
{
    int t, s, m, h, D, M, Y;
    int leap, i;

    t = time(NULL);
    //
    s = t % 60;
    t /= 60;
    // 分钟
    m = t % 60;
    t /= 60;
    // 小时
    h = t % 24;
    t /= 24;

    //
    Y = 1970;
    while (1)
    {
        leap = is_leap_year(Y);
        if (leap && t >= 366)
        {
            t -= 366;
            Y++;
        }
        else if (!leap && t >= 365)
        {
            t -= 365;
            Y++;
        }
        else
            break;
    }

    //
    leap = is_leap_year(Y);
    for (i = 0, M = 1; t >= month[leap][i] ; i++, M++)
        t -= month[leap][i];

    //
    D = t + 1;

    printf("%d-%d-%d %d:%d:%d\n", Y, M, D, h, m, s);
    return 0;
}
time函数计算时间

运行结果:2014-1-22 0:56:3

哦,日期是一样的,分钟也是一样,秒数应该也差不多,只有小时数差了8小时。

这回可以分析了!

time函数计算时间

我的电脑位于东八区,比世界统一时间(零区时间)快8个小时,

而time(NULL)函数返回的恰恰是世界统一时间。

所以我猜想:只要是在物理上的一个时间点,电脑设置了正确地时区,

电脑的时间也是对应于当地时区的区时,

位于东八区的电脑和位于西五区的电脑运行time(NULL)函数返回的数值是一样的。

time函数计算时间

上一篇:Fly.Box 1.9 企业网盘,支持多单位、多用户、断点续传、提取码、分享、收集文件、数据上报等


下一篇:Photoshop 制作一个霸气的老虎头