读书人

比对各国时间的程序,该如何解决

发布时间: 2012-08-03 00:12:14 作者: rapoo

比对各国时间的程序
举个例子:服务器的时间 东八区时间.
客户机的时间是其他国家的时间.

我的思路是这样的:我远程获取获取一下 服务器的时间.将服务器的时间转换成 格林威治时间.
然后我在将本地时间 在转换成 格林威治时间.然后在进行比对.如果比对不正确 自动设置对应的时间.

我现在遇到的问题是 服务器的时间转换成格林威治时间出现问题.
我是先获取服务器时间,然后将服务器小时直接减去 8.如果小时小于0,日期向前一天.
但是会出现一个问题是.7-1日8点之前 减去8 程序会让时间跑到7-0日.不会直接跑到6-31日.


有谁能给个例子参考一下.




[解决办法]

取struct tm,先转time_t,然后把从1970年开始的秒数减掉,转回tm就好,不过这个表示的时间范围比较小。

或者直接用 CTime + CTimeSpan 来处理
[解决办法]
仅供参考

C/C++ code
#include <stdio.h>#include <string.h>#include <time.h>#include <sys/timeb.h>struct tm st;time_t tt;char mon[4];char mn[12][4]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};int i;char timstr[27];char tmpbuf[128];struct _timeb tb;int tz;char c;void main() {    strcpy(timstr,"08/Dec/2011:15:25:03 +0800");    sscanf(timstr,"%2d/%3s/%4d:%2d:%2d:%2d",&st.tm_mday,mon,&st.tm_year,&st.tm_hour,&st.tm_min,&st.tm_sec);    for (i=0;i<12;i++) if (0==stricmp(mn[i],mon)) {st.tm_mon=i; break;}    st.tm_year-=1900;    tt=mktime(&st);    if (-1!=tt) {        strftime(tmpbuf,128,"%Y-%m-%d %H:%M:%S\n",localtime(&tt));        printf(tmpbuf);//2011-12-08 15:25:03    } else {        printf("[%s] is Invalid time string!\n",timstr);    }    _ftime(&tb);    strftime(tmpbuf,128,"%m/%b/%Y:%H:%M:%S",localtime(&tb.time));    tz=-tb.timezone;    c=(tz>0)?'+':'-';    tz=(tz>0)?tz:-tz;    sprintf(tmpbuf,"%s %c%02d%02d\n",tmpbuf,c,tz/60,tz%60);    printf(tmpbuf);//12/Dec/2011:17:36:41 +0800} 

读书人网 >C++

热点推荐