标题
[c/c++]妈妈呀,不同的时区 mktime 的结果是不同的!
clq
浏览(0) +
2008-05-22 15:43:59 发表
编辑
关键字:
[c/c++]妈妈呀,不同的时区 mktime 的结果是不同的!
void CTool1Dlg::OnButton4()
{
tm tm2;
memset(&tm2, 0, sizeof(tm));
tm2.tm_year = 70;
tm2.tm_mon = 0;
tm2.tm_mday = 1;
tm2.tm_hour = 8;//北京时间为 8 小时时差
//不等于程序所在的时区的话,下面的 t2 永远不会是 0 ,小于当地时区的话就会返回 -1 也就是失败
//也就是说 mktime 时按当地时间表示的 tm 结构来计算的!//但是又没有 gm_mktime 函数
//不过可以用 gmtime() 和 localtime() 设计出一个时区无关的 gm_mktime 函数来
time_t t2 = mktime(&tm2); // TODO: Add your control notification handler code here
t2 = 0;
tm * tm3 = gmtime(&t2);//这个时候要用 gmtime ,因是看结果,结果是要用格林威治时间表示的//test 看结果对不对
}
clq
这样就解决了.
//取得当前时区
int GetTimeZone()
{
time_t t = 0;//time(NULL);
tm * m = NULL;
tm gtm;//格林威治
tm ltm;//本地
memset(>m, 0, sizeof(tm));
memset(<m, 0, sizeof(tm));
m = gmtime(&t);
if (m == NULL) return 0;
gtm = *m;
m = localtime(&t);
if (m == NULL) return 0;
ltm = *m;
int r = ltm.tm_hour - gtm.tm_hour;
return r;
}
//mktime 是把 tm 中的时间当做本地时间来得到格林威治时间的,现在要把 tm 中的时间直接当做格林威治时间来算//算法上就是要加上时区的秒差
time_t gm_mktime(struct tm * m)
{
time_t t = mktime(m);//这时的 t 是要少 8 个小时的,要加上8小时的时间//但对于其他国家来说怎么算出这个时差呢.
//t = 8 * 60 * 60;
int iTimeZone = GetTimeZone();
t = iTimeZone * 60 * 60;
return t;
}
void CTool1Dlg::OnButton4()
{
tm tm2;
memset(&tm2, 0, sizeof(tm));
tm2.tm_year = 70;
tm2.tm_mon = 0;
tm2.tm_mday = 1;
tm2.tm_hour = 8;//北京时间为 8 小时时差
//不等于程序所在的时区的话,下面的 t2 永远不会是 0 ,小于当地时区的话就会返回 -1 也就是失败
//也就是说 mktime 时按当地时间表示的 tm 结构来计算的!//但是又没有 gm_mktime 函数
//不过可以用 gmtime() 和 localtime() 设计出一个时区无关的 gm_mktime 函数来
time_t t2 = mktime(&tm2); // TODO: Add your control notification handler code here
t2 = gm_mktime(&tm2);
t2 = 0;
tm * tm3 = gmtime(&t2);//这个时候要用 gmtime ,因是看结果,结果是要用格林威治时间表示的//test 看结果对不对
}
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.