最近在搞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秒"
请问问题出在哪里,应如何解决,谢谢!

解决方案 »

  1.   

    time与在BCB中,在VC中每次也不一样,本来几百次循环的time值应该一样的都为当天的7时0分0秒.
    在BCB中time值正确
      

  2.   

    你用CTime转化试试
    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
      

  3.   

    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,"秒");
    ---------------------------------------------------------------------------------------------
    上面这句改成以下:
    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);
      

  4.   

    刚才发的代码不太全,应该是把下面这些你原来的代码:
    //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);
      

  5.   

    比起你原来的代码,较大的改动只是先用time函数处理:
    time(&(pHeader->m_pReportV3[i].m_time));    
    再用gmtime函数处理而已。
      

  6.   

    没有用,我用了localtime转换,得到的结果还是不正确依然是"2008年5月14日4时5分39秒"
      

  7.   

    谢谢诸位,问题已经解决.
    代码逻辑上没有多少问题,除了在VC中月份需要在加1外,基本正确.主要是VC默认使用8字节对齐.
    所以如此解决:Menu:"project"/"settings"/"C/C++"/"Code Generation"/"Struct member alignment"下选择"4字节"即可谢谢,谢谢,结贴,每一回复平均给分.