unix时间戳和localtime

 

今天看代码的时候看到这么一段

    void user::setHelpday()
    {
        int  time = ::getTickCount();
        m_helpday = (time +(8 * 3600))/(3600 * 24);
    }

大致是保存一下当前是第几天,用于区分不同天,但是对立面的+8*3600不太理解

time_t cur = 0;
struct tm *timeinfo = localtime(&cur);
printf("%d,%d\n",timeinfo->tm_hour,timeinfo->tm_yday);

 

打印出来是 8,0

全世界在同一时间的time(0)返回的时间戳是一致的,都是

是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
UNIX时间戳的0按照ISO 8601规范为 :1970-01-01T00:00:00Z.
 
 
但是同一个时间戳在不同时区所对应的当地小时是不一样的。!就像时间戳0在中国就是8点
 
回到上面那个问题,

时区差东为正,西为负。在此,把东八区时区差记为 +0800,

UTC + (+0800) = 本地(北京)时间 (1)

所以要计算是第几天必须把时间戳+8*3600 再除24*3600才是对的。

 
posted @ 2013-08-12 15:04  vanishfan  阅读(748)  评论(0编辑  收藏  举报