比对各国时间的程序
举个例子:服务器的时间 东八区时间.
客户机的时间是其他国家的时间.
我的思路是这样的:我远程获取获取一下 服务器的时间.将服务器的时间转换成 格林威治时间.
然后我在将本地时间 在转换成 格林威治时间.然后在进行比对.如果比对不正确 自动设置对应的时间.
我现在遇到的问题是 服务器的时间转换成格林威治时间出现问题.
我是先获取服务器时间,然后将服务器小时直接减去 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}