首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

时区转换算法,该怎么处理

2012-05-03 
时区转换算法#include stdafx.h#include windows.hSYSTEMTIME Time(SYSTEMTIME st,WORD m_count,WORD

时区转换算法
#include "stdafx.h"
#include <windows.h>

SYSTEMTIME Time(SYSTEMTIME st,WORD m_count,WORD m_Day)
{
if (st.wHour - m_count < 0)//时
{
if (st.wDay - 1 <= 0)//天
{
if (st.wMonth - 1 <=0)//月
{
st.wYear -= 1;
st.wMonth = st.wMonth - 1 +12;
/*st.wDay = st.wDay -1 + m_Day;
st.wHour = st.wHour +16;
st.wDayOfWeek = (st.wDayOfWeek -1 + 7)%7;*/
}
else
{
st.wMonth -= 1;
}
st.wDay = st.wDay - 1 + m_Day; 
st.wHour = st.wHour +16;
st.wDayOfWeek = (st.wDayOfWeek -1 + 7)%7;

}
else
{
st.wDay -=1;
st.wHour = st.wHour + 16;
st.wDayOfWeek = (st.wDayOfWeek -1 + 7)%7;
}
}else
{
st.wHour -= m_count;
}

return st;

}
SYSTEMTIME TimeAdd(SYSTEMTIME st,WORD m_count)
{
switch(st.wMonth)
{
case 1:
st = Time(st,m_count,31);
break;
case 2:
if (((st.wYear % 4 == 0)&&(st.wYear %100 != 0)) || (st.wYear % 400 == 0))
{
st = Time(st,m_count,29);
}
else
{
st = Time(st,m_count,28);
}
break;
case 3:
st = Time(st,m_count,31);
break;
case 4:
st = Time(st,m_count,30);
break;
case 5:
st = Time(st,m_count,31);
break;
case 6:
st = Time(st,m_count,30);
break;
case 7:
st = Time(st,m_count,31);
break;
case 8:
st = Time(st,m_count,31);
break;
case 9:
st = Time(st,m_count,30);
break;
case 10:
st = Time(st,m_count,31);
break;
case 11:
st = Time(st,m_count,30);
break;
case 12:
st = Time(st,m_count,31);
break;
}

return st;
}
int _tmain(int argc, _TCHAR* argv[])
{
SYSTEMTIME st;
//GetSystemTime(&st);
printf("请输入时间:");
scanf("%d%d%d%d%d%d%d%d",
&st.wYear,
&st.wMonth,
&st.wDay,
&st.wHour,
&st.wMinute,
&st.wSecond,
&st.wMilliseconds,
&st.wDayOfWeek);
st = TimeAdd(st,8);

printf(" 年=%d\n 月=%d\n 日=%d\n 时=%d\n 分=%d\n 秒=%d\n 毫秒=%d\n 星期=%d\n ",
st.wYear,
st.wMonth,
st.wDay,
st.wHour,
st.wMinute,
st.wSecond,
st.wMilliseconds,
st.wDayOfWeek
);
return 0;
}

为什么这里的&st.wDay 收不到 数据呢??


[解决办法]
scanf("%d%d%d%d%d%d%d%d",
都是数字你怎么输入呢?
要改成这样:
scanf("%d,%d,%d,%d,%d,%d,%d,%d",输入类似2000,1,1,0,0,0,0,0

[解决办法]
看了一下SYSTEMTIME的定义,所有成员都是WORD类型的,%d要求参数是int,参数不匹配结果未知
要定义临时的int变量才可以
int tmpData[8];
 scanf("%d,%d,%d,%d,%d,%d,%d,%d",tmpData[0],tmpData[1]...,tmpData[8])
然后
st.wYear =tmpData[0]; 
st.wMonth=tmpData[1]; 
.....
这样应该就可以了

[解决办法]

探讨

可以用空格区分,用,号做分隔符也是不行。。。。。

[解决办法]
3楼的代码中tmpData[0]等的前边要有&,

热点排行