unix时间戳和localtime

时间:2023-03-09 16:48:36
unix时间戳和localtime

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

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

大致是保存一下当前是第几天,用于区分不同天,但是对立面的+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才是对的。