登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> 程序员学前班[不再更新,只读] >> 主题: [c/c++]妈妈呀,不同的时区 mktime 的结果是不同的!     [回主站]     [分站链接]
标题
[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
2008-5-22 16:12:47 发表 编辑

这样就解决了.

//取得当前时区
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 看结果对不对

}


总数:1 页次:1/1 首页 尾页  
总数:1 页次:1/1 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1