最近在搞helloworld,遇到如下问题,不得其解,求指点:
在BCB中有如下代码运行正确:
UINT wParam;
LONG lParam;
wParam=Msg.WParam;
lParam=Msg.LParam;
RCV_DATA* pHeader;
RCV_REPORT_STRUCTExV3* reportv2;
struct tm* time;
AnsiString stm;
pHeader = (RCV_DATA *)lParam; switch( wParam )
{
case RCV_REPORT:// 共享数据引用方式,股票行情
Form1->Caption=Time();
for(int i=0;i<pHeader->m_nPacketNum; i++)
{
// 数据处理
time=gmtime(&(pHeader->m_pReportV3[i].m_time));
stm=AnsiString(time->tm_year+1900)+"年"+AnsiString(time->tm_mon+1)\
+"月"+AnsiString(time->tm_mday)\
+"日"+AnsiString(time->tm_hour)\
+"时"+AnsiString(time->tm_min)\
+"分"+AnsiString(time->tm_sec)\
+"秒";
Memo1->Lines->Add(stm);
/////////////////////////////////////////////////
改为VC代码:
RCV_DATA* pHeader;
pHeader = (RCV_DATA *)lParam;
CString stm; RCV_REPORT_STRUCTExV3* reportV3;
struct tm* time;
int nCount; int i=0;
switch( wParam )
{
case RCV_REPORT:
// 共享数据引用方式,股票行情
nCount=pHeader->m_nPacketNum;
for(i=0;i<nCount; i++)
{
//pHeader->m_pReport[i] ...
// 数据处理
time=gmtime(&(pHeader->m_pReportV3[i].m_time)); stm.Format("%d%s%d%s%d%s%d%s%d%s%d%s",\
time->tm_year+1900,"年",\
time->tm_mon,"月",\
time->tm_mday,"日",\
time->tm_hour,"时",\
time->tm_min,"分",\
time->tm_sec,"秒");
//得到的数据不正确
在BCB中得到的是比如"2005年12月5日7时0分0秒"
在VC中得到的却是"2008年5月14日4时5分39秒"
请问问题出在哪里,应如何解决,谢谢!
在BCB中有如下代码运行正确:
UINT wParam;
LONG lParam;
wParam=Msg.WParam;
lParam=Msg.LParam;
RCV_DATA* pHeader;
RCV_REPORT_STRUCTExV3* reportv2;
struct tm* time;
AnsiString stm;
pHeader = (RCV_DATA *)lParam; switch( wParam )
{
case RCV_REPORT:// 共享数据引用方式,股票行情
Form1->Caption=Time();
for(int i=0;i<pHeader->m_nPacketNum; i++)
{
// 数据处理
time=gmtime(&(pHeader->m_pReportV3[i].m_time));
stm=AnsiString(time->tm_year+1900)+"年"+AnsiString(time->tm_mon+1)\
+"月"+AnsiString(time->tm_mday)\
+"日"+AnsiString(time->tm_hour)\
+"时"+AnsiString(time->tm_min)\
+"分"+AnsiString(time->tm_sec)\
+"秒";
Memo1->Lines->Add(stm);
/////////////////////////////////////////////////
改为VC代码:
RCV_DATA* pHeader;
pHeader = (RCV_DATA *)lParam;
CString stm; RCV_REPORT_STRUCTExV3* reportV3;
struct tm* time;
int nCount; int i=0;
switch( wParam )
{
case RCV_REPORT:
// 共享数据引用方式,股票行情
nCount=pHeader->m_nPacketNum;
for(i=0;i<nCount; i++)
{
//pHeader->m_pReport[i] ...
// 数据处理
time=gmtime(&(pHeader->m_pReportV3[i].m_time)); stm.Format("%d%s%d%s%d%s%d%s%d%s%d%s",\
time->tm_year+1900,"年",\
time->tm_mon,"月",\
time->tm_mday,"日",\
time->tm_hour,"时",\
time->tm_min,"分",\
time->tm_sec,"秒");
//得到的数据不正确
在BCB中得到的是比如"2005年12月5日7时0分0秒"
在VC中得到的却是"2008年5月14日4时5分39秒"
请问问题出在哪里,应如何解决,谢谢!
解决方案 »
- 为何程序不能正常退出
- VC中怎么调outlook的邮件群发功能
- 怎样把几张长宽一样的GIF图片拼在一起(横竖都可以),再保存为JPG格式
- 多线程运行时,系统有哪些操作会夺走其cpu控制权?
- 如何根据系统进程判断程序所在的目录,急,恳请支招?
- 帮我看看这个函数,很多地方说我内存泄漏,我学着释放,但无论如何都错。
- 斑竹,大家看看这个帖子?????????????
- 为什么 当我在登录对话框中什么也不输入就回车,竟可以直接进入主界面?
- 100分!!!!!!啦!!!!我想用telnet协议登陆主机,执行主机上的命令把结果传回我的机器,要求不能出现DOS模式
- c++课程设计mfc酒店点菜管理系统设计
- 请赐教:保存一个文件时如何取得文件夹的路径!
- ToolBar的按钮如何让其可以实现按下状态,再按一下可以弹起恢复?
在BCB中time值正确
time_t osBinaryTime; // C run-time time (defined in <time.h>)
CTime time3( osBinaryTime ); // CTime from C run-time time
CString s = time3.Format( "%A, %B %d, %Y" ); // 10:15 PM March 19, 1999
time->tm_year+1900,"年",\
time->tm_mon,"月",\
time->tm_mday,"日",\
time->tm_hour,"时",\
time->tm_min,"分",\
time->tm_sec,"秒");
---------------------------------------------------------------------------------------------
上面这句改成以下:
stm.Format("%d年%d月%d日%d时%d分%d秒",
time->tm_year+1900,
time->tm_mon+1,
time->tm_mday,
time->tm_hour+8,
time->tm_min,
time->tm_sec);
//pHeader->m_pReport[i] ...
// 数据处理
time=gmtime(&(pHeader->m_pReportV3[i].m_time)); stm.Format("%d%s%d%s%d%s%d%s%d%s%d%s",\
time->tm_year+1900,"年",\
time->tm_mon,"月",\
time->tm_mday,"日",\
time->tm_hour,"时",\
time->tm_min,"分",\
time->tm_sec,"秒");
----------------------------------------------------------------------------------
改成:
//pHeader->m_pReport[i] ...
// 数据处理
time(&(pHeader->m_pReportV3[i].m_time)); //这里要先保证你的pHeader->m_pReportV3[i].m_time数据成员m_time为long类型
time=gmtime(&(pHeader->m_pReportV3[i].m_time));
stm.Format("%d年%d月%d日%d时%d分%d秒",
time->tm_year+1900,
time->tm_mon+1,
time->tm_mday,
time->tm_hour+8,
time->tm_min,
time->tm_sec);
time(&(pHeader->m_pReportV3[i].m_time));
再用gmtime函数处理而已。
代码逻辑上没有多少问题,除了在VC中月份需要在加1外,基本正确.主要是VC默认使用8字节对齐.
所以如此解决:Menu:"project"/"settings"/"C/C++"/"Code Generation"/"Struct member alignment"下选择"4字节"即可谢谢,谢谢,结贴,每一回复平均给分.